如何仅在Custom Control中覆盖ItemTemplate

时间:2009-10-05 15:48:14

标签: wpf themes styles

我想创建一个源自ComboBox的自定义控件,但是如果我从visual studio模板创建自定义控件,它会创建一个默认的Style Control,然后我必须打开MSDN的{{1} } ControlTemplate,然后再次在generic.xaml中重新创建整个ComboBox样式

我想要做的是,我想创建一个源自ComboBox的自定义控件,而在generic.xaml中,我只想定义ComboBox而不是整个ItemTemplate

但是如果我保留这条线

ControlTemplate

然后,如果我从generic.xaml中删除static MyComboBox() { DefaultStyleKeyProperty. OverrideMetadata(typeof(MyComboBox), new FrameworkPropertyMetadata( typeof(MyComboBox))); } ,我根本看不到任何内容,但是如果我在generic.xaml中定义了键ControlTemplate,我应该如何初始化我的静态构造函数以便refelct只有ItemTemplate

当然我可以从msdn帮助重新设计xaml主题,但有没有简单的方法呢?

1 个答案:

答案 0 :(得分:1)

我最近编写了自己的自定义组合框,只更改了控件的ItemTemplate。组合框样式的其余部分继承自默认的组合框。

在自定义控件构造函数中:

 static CustomComboBox()
 {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomComboBox)
                        , new FrameworkPropertyMetadata(typeof(CustomComboBox)));

 }

然后在你的generic.xaml中:

<Style TargetType="{x:Type local:CustomComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                **INSERT YOUR ITEM TEMPLATE HERE**
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

这里的关键是设置样式的BasedOn属性以引用标准组合框控件。

希望这有帮助!