diff options
author | Bertrand Le Roy <beleroy@microsoft.com> | 2017-09-30 03:13:42 +0300 |
---|---|---|
committer | Bertrand Le Roy <beleroy@microsoft.com> | 2017-11-04 02:35:41 +0300 |
commit | 86131789460201cd55d8e29afe0d7ed8dc65f920 (patch) | |
tree | 3ad504b77767220eac620a6782ca6bfd75a67424 | |
parent | a3cec2176066e25749ec1b4e959bd989695962e4 (diff) |
Handle color editor textbox changes.
3 files changed, 73 insertions, 5 deletions
diff --git a/Xamarin.PropertyEditing.Windows.Standalone/MockedSampleControlButton.cs b/Xamarin.PropertyEditing.Windows.Standalone/MockedSampleControlButton.cs index 4b16dbd..dbaf1a7 100644 --- a/Xamarin.PropertyEditing.Windows.Standalone/MockedSampleControlButton.cs +++ b/Xamarin.PropertyEditing.Windows.Standalone/MockedSampleControlButton.cs @@ -1,4 +1,3 @@ -using System.Drawing; using Xamarin.PropertyEditing.Drawing; using Xamarin.PropertyEditing.Tests.MockControls; diff --git a/Xamarin.PropertyEditing.Windows/SolidBrushEditorControl.cs b/Xamarin.PropertyEditing.Windows/SolidBrushEditorControl.cs index 32b0daa..6725d89 100644 --- a/Xamarin.PropertyEditing.Windows/SolidBrushEditorControl.cs +++ b/Xamarin.PropertyEditing.Windows/SolidBrushEditorControl.cs @@ -1,3 +1,10 @@ +using System.Text.RegularExpressions; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using Xamarin.PropertyEditing.Drawing; +using Xamarin.PropertyEditing.ViewModels; + namespace Xamarin.PropertyEditing.Windows { internal class SolidBrushEditorControl @@ -7,5 +14,67 @@ namespace Xamarin.PropertyEditing.Windows { DefaultStyleKey = typeof (SolidBrushEditorControl); } + + TextBox redEntry; + TextBox greenEntry; + TextBox blueEntry; + TextBox alphaEntry; + + SolidBrushPropertyViewModel ViewModel => DataContext as SolidBrushPropertyViewModel; + + public override void OnApplyTemplate () + { + base.OnApplyTemplate (); + + redEntry = (TextBox)GetTemplateChild ("redEntry"); + redEntry.PreviewTextInput += ConstrainToDigits; + redEntry.LostFocus += (s, e) => Update(); + greenEntry = (TextBox)GetTemplateChild ("greenEntry"); + greenEntry.PreviewTextInput += ConstrainToDigits; + greenEntry.LostFocus += (s, e) => Update (); + blueEntry = (TextBox)GetTemplateChild ("blueEntry"); + blueEntry.PreviewTextInput += ConstrainToDigits; + blueEntry.LostFocus += (s, e) => Update (); + alphaEntry = (TextBox)GetTemplateChild ("alphaEntry"); + alphaEntry.PreviewTextInput += ConstrainToDigits; + alphaEntry.LostFocus += (s, e) => Update (); + } + + private void Update () + { + var oldColor = ViewModel.Value.Color; + var newColor = new CommonColor (oldColor.R, oldColor.G, oldColor.B, oldColor.A); + if (byte.TryParse (redEntry.Text, out byte newRed)) { + newColor.R = newRed; + } + else { + redEntry.Text = oldColor.R.ToString(); + } + if (byte.TryParse (greenEntry.Text, out byte newGreen)) { + newColor.G = newGreen; + } + else { + greenEntry.Text = oldColor.G.ToString (); + } + if (byte.TryParse (blueEntry.Text, out byte newBlue)) { + newColor.B = newBlue; + } + else { + blueEntry.Text = oldColor.B.ToString (); + } + if (byte.TryParse (alphaEntry.Text, out byte newAlpha)) { + newColor.A = newAlpha; + } + else { + alphaEntry.Text = oldColor.A.ToString (); + } + ViewModel.Value = new CommonSolidBrush (newColor); + } + + static readonly Regex digitsOnly = new Regex ("^[0-9]?$"); + private void ConstrainToDigits (object sender, TextCompositionEventArgs e) + { + e.Handled = !digitsOnly.IsMatch(e.Text); + } } } diff --git a/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml b/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml index 1d6036e..84bdd26 100644 --- a/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml +++ b/Xamarin.PropertyEditing.Windows/Themes/Resources.xaml @@ -334,19 +334,19 @@ </Canvas> <DockPanel Grid.Column="2" HorizontalAlignment="Stretch" Grid.Row="0" VerticalAlignment="Top"> <Label Content="R" HorizontalAlignment="Left" VerticalAlignment="Center" DockPanel.Dock="Left" /> - <local:IntegerUpDownControl Name="redEntry" Margin="14,0,2,0" Value="{Binding Value.Color.R}" MaximumValue="255" MinimumValue="0" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Red" VerticalAlignment="Center" DockPanel.Dock="Left"/> + <TextBox Name="redEntry" Margin="14,0,2,0" Text="{Binding Value.Color.R,Mode=OneTime}" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Red" VerticalAlignment="Center" DockPanel.Dock="Left"/> </DockPanel> <DockPanel Grid.Column="2" HorizontalAlignment="Stretch" Grid.Row="1" VerticalAlignment="Top"> <Label Content="G" HorizontalAlignment="Left" VerticalAlignment="Center" DockPanel.Dock="Left" /> - <local:IntegerUpDownControl Name="greenEntry" Margin="14,0,2,0" Value="{Binding Value.Color.G}" MaximumValue="255" MinimumValue="0" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Green" VerticalAlignment="Center" DockPanel.Dock="Left"/> + <TextBox Name="greenEntry" Margin="14,0,2,0" Text="{Binding Value.Color.G,Mode=OneTime}" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Green" VerticalAlignment="Center" DockPanel.Dock="Left"/> </DockPanel> <DockPanel Grid.Column="2" HorizontalAlignment="Stretch" Grid.Row="2" VerticalAlignment="Top"> <Label Content="B" HorizontalAlignment="Left" VerticalAlignment="Center" DockPanel.Dock="Left" /> - <local:IntegerUpDownControl Name="blueEntry" Margin="14,0,2,0" Value="{Binding Value.Color.B}" MaximumValue="255" MinimumValue="0" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Blue" VerticalAlignment="Center" DockPanel.Dock="Left"/> + <TextBox Name="blueEntry" Margin="14,0,2,0" Text="{Binding Value.Color.B,Mode=OneTime}" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Blue" VerticalAlignment="Center" DockPanel.Dock="Left"/> </DockPanel> <DockPanel Grid.Column="2" HorizontalAlignment="Stretch" Grid.Row="3" VerticalAlignment="Top"> <Label Content="A" HorizontalAlignment="Left" VerticalAlignment="Center" DockPanel.Dock="Left" /> - <local:IntegerUpDownControl Name="alphaEntry" Margin="14,0,2,0" Value="{Binding Value.Color.A}" MaximumValue="255" MinimumValue="0" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Alpha" VerticalAlignment="Center" DockPanel.Dock="Left"/> + <TextBox Name="alphaEntry" Margin="14,0,2,0" Text="{Binding Value.Color.A,Mode=OneTime}" IsEnabled="{Binding Property.CanWrite,Mode=OneTime}" AutomationProperties.HelpText="Alpha" VerticalAlignment="Center" DockPanel.Dock="Left"/> </DockPanel> <Rectangle Name="colorChooser" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="15" Margin="3" Stroke="Black"> <Rectangle.Fill> |