c# wpf styles color-picker wpf-extended-toolkit

c# - WPF: ¿Hay alguna forma de anular parte de un ControlTemplate sin redefinir todo el estilo?



styles color-picker (2)

Obtenga una ventana emergente de ColorPicker a través de VisualTreeHelper y cambie las propiedades del borde (hijo de ventana emergente) de esta manera:

private void colorPicker_Loaded(object sender,RoutedEventArgs e) { Popup popup = FindVisualChildByName<Popup> ((sender as DependencyObject),"PART_ColorPickerPalettePopup"); Border border = FindVisualChildByName<Border> (popup.Child,"DropDownBorder"); border.Background = Brushes.Yellow; } private T FindVisualChildByName<T>(DependencyObject parent,string name) where T:DependencyObject { for (int i = 0;i < VisualTreeHelper.GetChildrenCount (parent);i++) { var child = VisualTreeHelper.GetChild (parent,i); string controlName = child.GetValue (Control.NameProperty) as string; if (controlName == name) { return child as T; } else { T result = FindVisualChildByName<T> (child,name); if (result != null) return result; } } return null; }

Estoy tratando de diseñar un WPF xctk: ColorPicker. Quiero cambiar el color de fondo de la vista desplegable y el texto sin redefinir todo el estilo.

Sé que ColorPicker contiene, por ejemplo, una parte llamada "PART_ColorPickerPalettePopup". ¿Hay alguna manera de hacer referencia directa a esta parte en mi estilo, proporcionando, por ejemplo, solo un nuevo color de fondo?

Quiero evitar tener que redefinir todas las demás propiedades de "PART_ColorPickerPalettePopup".

Enlace al ColorPicker que estoy describiendo


Puede basar un estilo en otro estilo y anular definidores específicos:

<Style x:Key="myStyle" TargetType="xctk:ColorPicker" BasedOn="{StaticResource {x:Type xctk:ColorPicker}}"> <!-- This will override the Background setter of the base style --> <Setter Property="Background" Value="Red" /> </Style>

Pero no puede "anular" solo una parte de un ControlTemplate. Desafortunadamente, debe (re) definir toda la plantilla como un todo.