2009-10-05 77 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屬性引用的標準組合框控件。

希望這會有所幫助!