private static void UndoCommand_Executed(object sender, ExecutedRoutedEventArgs e) { // Use simple reverse-or-redo Undo (like Notepad). ColorPickerUserControl colorPicker = (ColorPickerUserControl)sender; colorPicker.Color = (Color)colorPicker.previousColor; }
//属性变化回调函数负责使Color属性与Red、Green以及Blue属性保持一致。无论何时Red、Green以及Blue属性发生变化,都会相应地调整Color属性,当 //设置Color属性时,也会更新Red、Green和Blue值 private static void OnColorChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { ColorPickerUserControl colorPicker = (ColorPickerUserControl)sender; Color oldColor = (Color)e.OldValue; Color newColor = (Color)e.NewValue; colorPicker.Red = newColor.R; colorPicker.Green = newColor.G; colorPicker.Blue = newColor.B; colorPicker.previousColor = oldColor; colorPicker.OnColorChanged(oldColor, newColor); }
private static void OnColorRGBChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { ColorPickerUserControl colorPicker = (ColorPickerUserControl)sender; Color color = colorPicker.Color; if (e.Property == RedProperty) { color.R = (byte)e.NewValue; } else if (e.Property == GreenProperty) { color.G = (byte)e.NewValue; } else if (e.Property == BlueProperty) { color.B = (byte)e.NewValue; } colorPicker.Color = color; }
/*5: создаем функции обратного вызова*/ private static void OnColorChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { ColorPickerUserControl colorPicker = (ColorPickerUserControl)sender; Color oldColor = (Color)e.OldValue; Color newColor = (Color)e.NewValue; colorPicker.Red = newColor.R; colorPicker.Green = newColor.G; colorPicker.Blue = newColor.B; //newColor.A; //после изменени¤ св-в Red, Green, Blue из этой ф-ции //ф-ци¤ OnColorRGBChanged, вызываема¤ 3 раза, //не вызовет ф-цию OnColorChanged на повторное исполнение //здесь можно сохран¤ть предыдущее значение св-ва: colorPicker.previousColor = oldColor; //вызов издател¤ событи¤ (создетс¤ ниже) colorPicker.OnColorChanged(oldColor, newColor); }
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.colorPicker = ((CustomControls.ColorPickerUserControl)(target)); #line 12 "..\..\MyColorPicker.xaml" this.colorPicker.ColorChanged += new System.Windows.RoutedPropertyChangedEventHandler <System.Windows.Media.Color>(this.colorPicker_ColorChanged); #line default #line hidden return; case 2: #line 13 "..\..\MyColorPicker.xaml" ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.cmdGet_Click); #line default #line hidden return; case 3: #line 14 "..\..\MyColorPicker.xaml" ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.cmdSet_Click); #line default #line hidden return; case 4: this.lblColor = ((System.Windows.Controls.TextBlock)(target)); return; } this._contentLoaded = true; }
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.colorPicker = ((CustomControls.ColorPickerUserControl)(target)); #line 12 "..\..\MyColorPicker.xaml" this.colorPicker.ColorChanged += new System.Windows.RoutedPropertyChangedEventHandler<System.Windows.Media.Color>(this.colorPicker_ColorChanged); #line default #line hidden return; case 2: #line 13 "..\..\MyColorPicker.xaml" ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.cmdGet_Click); #line default #line hidden return; case 3: #line 14 "..\..\MyColorPicker.xaml" ((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.cmdSet_Click); #line default #line hidden return; case 4: this.lblColor = ((System.Windows.Controls.TextBlock)(target)); return; } this._contentLoaded = true; }
private static void UndoCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e) { ColorPickerUserControl colorPicker = (ColorPickerUserControl)sender; e.CanExecute = colorPicker.previousColor.HasValue; }