Make Editor focused background color behavior consistent with Entry on Windows (#456)

This commit is contained in:
E.Z. Hart 2016-10-20 14:19:27 -06:00 коммит произвёл Jason Smith
Родитель 8d03598812
Коммит dbd4390c5b
4 изменённых файлов: 71 добавлений и 5 удалений

Просмотреть файл

@ -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;
}
}
}

Просмотреть файл

@ -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" />

Просмотреть файл

@ -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);

Просмотреть файл

@ -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");
}
}