Browse Source

ColorCanvas: fixed small issue with recursive SelectedColor settings

pull/1645/head
brianlagunas_cp 16 years ago
parent
commit
5734f10d3c
  1. 156
      ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ColorCanvas/Implementation/ColorCanvas.cs

156
ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/ColorCanvas/Implementation/ColorCanvas.cs

@ -18,6 +18,7 @@ namespace Microsoft.Windows.Controls
private Canvas _colorShadeSelector; private Canvas _colorShadeSelector;
private ColorSpectrumSlider _spectrumSlider; private ColorSpectrumSlider _spectrumSlider;
private Point? _currentColorPosition; private Point? _currentColorPosition;
private bool _surpressPropertyChanged;
#endregion //Private Members #endregion //Private Members
@ -25,7 +26,7 @@ namespace Microsoft.Windows.Controls
#region SelectedColor #region SelectedColor
public static readonly DependencyProperty SelectedColorProperty = DependencyProperty.Register("SelectedColor", typeof(Color), typeof(ColorCanvas), new UIPropertyMetadata(Colors.White, OnSelectedColorChanged)); public static readonly DependencyProperty SelectedColorProperty = DependencyProperty.Register("SelectedColor", typeof(Color), typeof(ColorCanvas), new UIPropertyMetadata(Colors.Black, OnSelectedColorChanged));
public Color SelectedColor public Color SelectedColor
{ {
get { return (Color)GetValue(SelectedColorProperty); } get { return (Color)GetValue(SelectedColorProperty); }
@ -42,6 +43,7 @@ namespace Microsoft.Windows.Controls
protected virtual void OnSelectedColorChanged(Color oldValue, Color newValue) protected virtual void OnSelectedColorChanged(Color oldValue, Color newValue)
{ {
UpdateRGBValues(newValue); UpdateRGBValues(newValue);
UpdateColorShadeSelectorPosition(newValue);
} }
#endregion //SelectedColor #endregion //SelectedColor
@ -50,15 +52,11 @@ namespace Microsoft.Windows.Controls
#region A #region A
public static readonly DependencyProperty AProperty = DependencyProperty.Register("A", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)255, new PropertyChangedCallback(OnAChanged), new CoerceValueCallback(OnCoerceA))); public static readonly DependencyProperty AProperty = DependencyProperty.Register("A", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)255, OnAChanged));
public byte A
private static object OnCoerceA(DependencyObject o, object value)
{ {
ColorCanvas colorCanvas = o as ColorCanvas; get { return (byte)GetValue(AProperty); }
if (colorCanvas != null) set { SetValue(AProperty, value); }
return colorCanvas.OnCoerceA((byte)value);
else
return value;
} }
private static void OnAChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) private static void OnAChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
@ -68,43 +66,21 @@ namespace Microsoft.Windows.Controls
colorCanvas.OnAChanged((byte)e.OldValue, (byte)e.NewValue); colorCanvas.OnAChanged((byte)e.OldValue, (byte)e.NewValue);
} }
protected virtual byte OnCoerceA(byte value)
{
// TODO: Keep the proposed value within the desired range.
return value;
}
protected virtual void OnAChanged(byte oldValue, byte newValue) protected virtual void OnAChanged(byte oldValue, byte newValue)
{ {
UpdateRGBColor(); if (!_surpressPropertyChanged)
} UpdateRGBColor();
public byte A
{
// IMPORTANT: To maintain parity between setting a property in XAML and procedural code, do not touch the getter and setter inside this dependency property!
get
{
return (byte)GetValue(AProperty);
}
set
{
SetValue(AProperty, value);
}
} }
#endregion //A #endregion //A
#region R #region R
public static readonly DependencyProperty RProperty = DependencyProperty.Register("R", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)255, new PropertyChangedCallback(OnRChanged), new CoerceValueCallback(OnCoerceR))); public static readonly DependencyProperty RProperty = DependencyProperty.Register("R", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)0, OnRChanged));
public byte R
private static object OnCoerceR(DependencyObject o, object value)
{ {
ColorCanvas colorCanvas = o as ColorCanvas; get { return (byte)GetValue(RProperty); }
if (colorCanvas != null) set { SetValue(RProperty, value); }
return colorCanvas.OnCoerceR((byte)value);
else
return value;
} }
private static void OnRChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) private static void OnRChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
@ -114,44 +90,21 @@ namespace Microsoft.Windows.Controls
colorCanvas.OnRChanged((byte)e.OldValue, (byte)e.NewValue); colorCanvas.OnRChanged((byte)e.OldValue, (byte)e.NewValue);
} }
protected virtual byte OnCoerceR(byte value)
{
// TODO: Keep the proposed value within the desired range.
return value;
}
protected virtual void OnRChanged(byte oldValue, byte newValue) protected virtual void OnRChanged(byte oldValue, byte newValue)
{ {
UpdateRGBColor(); if (!_surpressPropertyChanged)
UpdateRGBColor();
} }
public byte R
{
// IMPORTANT: To maintain parity between setting a property in XAML and procedural code, do not touch the getter and setter inside this dependency property!
get
{
return (byte)GetValue(RProperty);
}
set
{
SetValue(RProperty, value);
}
}
#endregion //R #endregion //R
#region G #region G
public static readonly DependencyProperty GProperty = DependencyProperty.Register("G", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)255, new PropertyChangedCallback(OnGChanged), new CoerceValueCallback(OnCoerceG))); public static readonly DependencyProperty GProperty = DependencyProperty.Register("G", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)0, OnGChanged));
public byte G
private static object OnCoerceG(DependencyObject o, object value)
{ {
ColorCanvas colorCanvas = o as ColorCanvas; get { return (byte)GetValue(GProperty); }
if (colorCanvas != null) set { SetValue(GProperty, value); }
return colorCanvas.OnCoerceG((byte)value);
else
return value;
} }
private static void OnGChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) private static void OnGChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
@ -161,44 +114,21 @@ namespace Microsoft.Windows.Controls
colorCanvas.OnGChanged((byte)e.OldValue, (byte)e.NewValue); colorCanvas.OnGChanged((byte)e.OldValue, (byte)e.NewValue);
} }
protected virtual byte OnCoerceG(byte value)
{
// TODO: Keep the proposed value within the desired range.
return value;
}
protected virtual void OnGChanged(byte oldValue, byte newValue) protected virtual void OnGChanged(byte oldValue, byte newValue)
{ {
UpdateRGBColor(); if (!_surpressPropertyChanged)
UpdateRGBColor();
} }
public byte G
{
// IMPORTANT: To maintain parity between setting a property in XAML and procedural code, do not touch the getter and setter inside this dependency property!
get
{
return (byte)GetValue(GProperty);
}
set
{
SetValue(GProperty, value);
}
}
#endregion //G #endregion //G
#region B #region B
public static readonly DependencyProperty BProperty = DependencyProperty.Register("B", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)255, new PropertyChangedCallback(OnBChanged), new CoerceValueCallback(OnCoerceB))); public static readonly DependencyProperty BProperty = DependencyProperty.Register("B", typeof(byte), typeof(ColorCanvas), new UIPropertyMetadata((byte)0, OnBChanged));
public byte B
private static object OnCoerceB(DependencyObject o, object value)
{ {
ColorCanvas colorCanvas = o as ColorCanvas; get { return (byte)GetValue(BProperty); }
if (colorCanvas != null) set { SetValue(BProperty, value); }
return colorCanvas.OnCoerceB((byte)value);
else
return value;
} }
private static void OnBChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) private static void OnBChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
@ -208,37 +138,18 @@ namespace Microsoft.Windows.Controls
colorCanvas.OnBChanged((byte)e.OldValue, (byte)e.NewValue); colorCanvas.OnBChanged((byte)e.OldValue, (byte)e.NewValue);
} }
protected virtual byte OnCoerceB(byte value)
{
// TODO: Keep the proposed value within the desired range.
return value;
}
protected virtual void OnBChanged(byte oldValue, byte newValue) protected virtual void OnBChanged(byte oldValue, byte newValue)
{ {
UpdateRGBColor(); if (!_surpressPropertyChanged)
UpdateRGBColor();
} }
public byte B
{
// IMPORTANT: To maintain parity between setting a property in XAML and procedural code, do not touch the getter and setter inside this dependency property!
get
{
return (byte)GetValue(BProperty);
}
set
{
SetValue(BProperty, value);
}
}
#endregion //B #endregion //B
#endregion //RGB #endregion //RGB
#region HexadecimalString #region HexadecimalString
public static readonly DependencyProperty HexadecimalStringProperty = DependencyProperty.Register("HexadecimalString", typeof(string), typeof(ColorCanvas), new UIPropertyMetadata("#FFFFFFFF", OnHexadecimalStringChanged)); public static readonly DependencyProperty HexadecimalStringProperty = DependencyProperty.Register("HexadecimalString", typeof(string), typeof(ColorCanvas), new UIPropertyMetadata("#FFFFFFFF", OnHexadecimalStringChanged));
public string HexadecimalString public string HexadecimalString
{ {
@ -256,10 +167,10 @@ namespace Microsoft.Windows.Controls
protected virtual void OnHexadecimalStringChanged(string oldValue, string newValue) protected virtual void OnHexadecimalStringChanged(string oldValue, string newValue)
{ {
if (!SelectedColor.ToString().Equals(newValue)) if (!SelectedColor.ToString().Equals(newValue))
{ {
SetSelectedColorAndPositionSelector((Color)ColorConverter.ConvertFromString(newValue)); SetSelectedColorAndPositionSelector((Color)ColorConverter.ConvertFromString(newValue));
} }
} }
#endregion //HexadecimalString #endregion //HexadecimalString
@ -291,7 +202,8 @@ namespace Microsoft.Windows.Controls
_spectrumSlider = (ColorSpectrumSlider)GetTemplateChild("PART_SpectrumSlider"); _spectrumSlider = (ColorSpectrumSlider)GetTemplateChild("PART_SpectrumSlider");
_spectrumSlider.ValueChanged += SpectrumSlider_ValueChanged; _spectrumSlider.ValueChanged += SpectrumSlider_ValueChanged;
SetSelectedColorAndPositionSelector(SelectedColor); UpdateRGBValues(SelectedColor);
UpdateColorShadeSelectorPosition(SelectedColor);
} }
protected override void OnPreviewKeyDown(KeyEventArgs e) protected override void OnPreviewKeyDown(KeyEventArgs e)
@ -363,10 +275,14 @@ namespace Microsoft.Windows.Controls
private void UpdateRGBValues(Color color) private void UpdateRGBValues(Color color)
{ {
_surpressPropertyChanged = true;
A = color.A; A = color.A;
R = color.R; R = color.R;
G = color.G; G = color.G;
B = color.B; B = color.B;
_surpressPropertyChanged = false;
} }
private void SetSelectedColorAndPositionSelector(Color color) private void SetSelectedColorAndPositionSelector(Color color)

Loading…
Cancel
Save