2009-10-05 76 views
0

我想创建ComboBox派生的自定义控制,但如果我创建从Visual Studio模板自定义的控制,它创建控件的默认Style,我必须再打开MSDN的ComboBoxControlTemplate然后再重新创建整个ComboBox风格在generic.xaml如何只覆盖ItemTemplate中的自定义控制

我想要做的是,我想创建ComboBox并在generic.xaml派生的自定义控制我只是想定义ItemTemplate而不是整个ControlTemplate

但是,如果我把线

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

然后,我没有看到任何东西,如果我从generic.xaml删除ControlTemplate,但是如果我定义generic.xaml关键ItemTemplate,我应该怎么初始化我静态构造函数仅用于反射ItemTemplate

确定我可以重新设计从MSDN帮助的xaml主题,但没有任何简单的方法来做到这一点?

+0

您是否尝试过设置控件模板的样式?类似于 Carlo 2009-10-05 18:40:35

+0

@Carlo,我不想设置ControlTemplate,我只想设置ItemTemplate,如果我设置ControlTemplate,然后我将不得不编写默认组合框已经定义的所有内容。 – 2009-10-06 06:18:59

回答

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> 

这里的关键是设置样式的支持算法FMP属性引用的标准组合框控件。

希望这会有所帮助!