WPF: C’è un modo per sovrascrivere una parte di un ControlTemplate senza ridefinire l’intero stile?

Sto cercando di disegnare un WPF xctk: ColorPicker. Voglio cambiare il colore di sfondo della vista a discesa e del testo senza ridefinire l’intero stile.

So che ColorPicker contiene ad esempio una parte denominata “PART_ColorPickerPalettePopup”. C’è un modo in cui posso fare riferimento direttamente a questa parte nel mio stile, fornendo ad esempio un nuovo colore di sfondo solo ?

Voglio evitare di dover ridefinire tutte le altre proprietà di “PART_ColorPickerPalettePopup”.

Link al ColorPicker che sto descrivendo

Puoi basare uno stile su un altro stile e scavalcare i setti specfici:

 

Ma non è ansible “sovrascrivere” solo una parte di un object ControlTemplate. Sfortunatamente è necessario (ri) definire l’intero modello nel suo insieme.

Ottieni popup da ColorPicker tramite VisualTreeHelper e modifica le proprietà del bordo (figlio di popup) in questo modo:

  private void colorPicker_Loaded(object sender,RoutedEventArgs e) { Popup popup = FindVisualChildByName ((sender as DependencyObject),"PART_ColorPickerPalettePopup"); Border border = FindVisualChildByName (popup.Child,"DropDownBorder"); border.Background = Brushes.Yellow; } private T FindVisualChildByName(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 (child,name); if (result != null) return result; } } return null; }