c# - WPF: क्या पूरी शैली को फिर से परिभाषित किए बिना ControlTemplate के भाग को ओवरराइड करने का एक तरीका है?




styles color-picker (2)

VisualTreeHelper के माध्यम से ColorPicker से पॉपअप प्राप्त करें और सीमा गुणों (पॉपअप का बच्चा) को इस तरह बदलें:

   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;
    }

मैं एक WPF xctk स्टाइल करने की कोशिश कर रहा हूं: ColorPicker। मैं पूरी शैली को फिर से परिभाषित किए बिना ड्रॉपडाउन दृश्य और पाठ की पृष्ठभूमि का रंग बदलना चाहता हूं।

मुझे पता है कि ColorPicker में "PART_ColorPickerPalettePopup" नाम का एक भाग शामिल है। वहाँ एक तरीका है कि मैं सीधे अपनी शैली में इस हिस्से का संदर्भ दे सकता हूं, उदाहरण के लिए केवल एक नया पृष्ठभूमि रंग प्रदान करता है ?

मैं "PART_ColorPickerPalettePopup" के अन्य सभी गुणों को फिर से परिभाषित करने से बचना चाहता हूं।

ColorPicker का लिंक मैं बता रहा हूं


आप किसी अन्य शैली पर शैली को आधार बना सकते हैं और विशेष प्रकार के वास को ओवरराइड कर सकते हैं:

<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>

लेकिन आप एक ControlTemplate का केवल एक हिस्सा "ओवरराइड" नहीं कर सकते। दुर्भाग्य से आपको तब (फिर से) पूरे टेम्पलेट को एक पूरे के रूप में परिभाषित करना होगा।







wpf-extended-toolkit