diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-10-20 14:19:27 -0600 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-10-20 13:19:27 -0700 |
commit | dbd4390c5bf22a3f43a0f2f9b5defe4a76c727f4 (patch) | |
tree | afb0e73acc7c9371cba03a582d82b812f85b6309 | |
parent | 8d035988123720fce35a0cc294b4b50686412c5e (diff) | |
download | xamarin-forms-dbd4390c5bf22a3f43a0f2f9b5defe4a76c727f4.tar.gz xamarin-forms-dbd4390c5bf22a3f43a0f2f9b5defe4a76c727f4.tar.bz2 xamarin-forms-dbd4390c5bf22a3f43a0f2f9b5defe4a76c727f4.zip |
Make Editor focused background color behavior consistent with Entry on Windows (#456)
4 files changed, 71 insertions, 5 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44584.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44584.cs new file mode 100644 index 00000000..f20edd7f --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44584.cs @@ -0,0 +1,44 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +namespace Xamarin.Forms.Controls +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 44584, + "UWP - Editor: changing the background color will only take effect after the entry gained focus")] + public class Bugzilla44584 : TestContentPage + { + protected override void Init() + { + var instructions = new Label + { + Text = @" +Tap the first button once to turn the Entry background color to Green. Tap the Entry to focus it; the background should remain green; if it does not, the test has failed. +Tap the second button once to turn the Editor background color to Green. Tap the Editor to focus it; the background should remain green; if it does not, the test has failed." + }; + + var entryButton = new Button { Text = "Toggle Entry Background (Green/Default)" }; + var entry = new Entry(); + + entryButton.Clicked += + (sender, args) => { entry.BackgroundColor = entry.BackgroundColor != Color.Green ? Color.Green : Color.Default; }; + + var editorButton = new Button { Text = "Toggle Editor Background (Green/Default)" }; + var editor = new Editor() + { + HeightRequest = 80 + }; + + editorButton.Clicked += + (sender, args) => { editor.BackgroundColor = editor.BackgroundColor != Color.Green ? Color.Green : Color.Default; }; + + var layout = new StackLayout + { + VerticalOptions = LayoutOptions.Center, + Children = { instructions, entryButton, entry, editorButton, editor } + }; + + Content = layout; + } + } +}
\ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index edbe9d07..07b8d7b4 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -128,6 +128,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla43516.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla44166.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla44461.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla44584.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42832.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla44044.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> diff --git a/Xamarin.Forms.Platform.WinRT/EditorRenderer.cs b/Xamarin.Forms.Platform.WinRT/EditorRenderer.cs index 7c4acfba..2fc01330 100644 --- a/Xamarin.Forms.Platform.WinRT/EditorRenderer.cs +++ b/Xamarin.Forms.Platform.WinRT/EditorRenderer.cs @@ -1,6 +1,7 @@ using System.ComponentModel; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Media; #if WINDOWS_UWP @@ -10,9 +11,10 @@ namespace Xamarin.Forms.Platform.UWP namespace Xamarin.Forms.Platform.WinRT #endif { - public class EditorRenderer : ViewRenderer<Editor, TextBox> + public class EditorRenderer : ViewRenderer<Editor, FormsTextBox> { bool _fontApplied; + Brush _backgroundColorFocusedDefaultBrush; protected override void OnElementChanged(ElementChangedEventArgs<Editor> e) { @@ -20,7 +22,12 @@ namespace Xamarin.Forms.Platform.WinRT { if (Control == null) { - var textBox = new TextBox { AcceptsReturn = true, TextWrapping = TextWrapping.Wrap }; + var textBox = new FormsTextBox + { + AcceptsReturn = true, + TextWrapping = TextWrapping.Wrap, + Style = Windows.UI.Xaml.Application.Current.Resources["FormsTextBoxStyle"] as Windows.UI.Xaml.Style + }; SetNativeControl(textBox); @@ -50,6 +57,8 @@ namespace Xamarin.Forms.Platform.WinRT protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { + base.OnElementPropertyChanged(sender, e); + if (e.PropertyName == Editor.TextColorProperty.PropertyName) { UpdateTextColor(); @@ -70,8 +79,6 @@ namespace Xamarin.Forms.Platform.WinRT { UpdateText(); } - - base.OnElementPropertyChanged(sender, e); } void OnLostFocus(object sender, RoutedEventArgs e) @@ -79,6 +86,20 @@ namespace Xamarin.Forms.Platform.WinRT Element.SendCompleted(); } + protected override void UpdateBackgroundColor() + { + base.UpdateBackgroundColor(); + + if (Control == null) + { + return; + } + + // By default some platforms have alternate default background colors when focused + BrushHelpers.UpdateColor(Element.BackgroundColor, ref _backgroundColorFocusedDefaultBrush, + () => Control.BackgroundFocusBrush, brush => Control.BackgroundFocusBrush = brush); + } + void OnNativeTextChanged(object sender, Windows.UI.Xaml.Controls.TextChangedEventArgs args) { Element.SetValueCore(Editor.TextProperty, Control.Text); diff --git a/Xamarin.Forms.Platform.WinRT/FormsTextBox.cs b/Xamarin.Forms.Platform.WinRT/FormsTextBox.cs index 5847e0b9..593c575a 100644 --- a/Xamarin.Forms.Platform.WinRT/FormsTextBox.cs +++ b/Xamarin.Forms.Platform.WinRT/FormsTextBox.cs @@ -111,7 +111,7 @@ namespace Xamarin.Forms.Platform.WinRT if (Device.Idiom == TargetIdiom.Phone) { // If we're on the phone, we need to grab this from the template - // so we can manually handle it's background when focused + // so we can manually handle its background when focused _borderElement = (Border)GetTemplateChild("BorderElement"); } } |