2010-01-09 70 views
14

我在一個WPF項目上工作,我已經爲某些特殊操作對CheckBox控制進行了重寫。這是正常工作。如何繼承控制模板

我的問題是,從主題(來自codeplex的shinyred.xaml)應用的ControlTemplate未應用於我的覆蓋控件。有沒有辦法繼承我的新控件使用的CheckBoxControlTemplate

我能找到的所有樣品都集中在繼承CheckBox的樣式,但沒有任何關於ControlTemplate的樣式。

回答

17

不,如你所說可以通過使用BasedOn屬性來「繼承」一種風格,但不可能直接「繼承」模板。這是可以理解的,但模板繼承的語義是什麼?派生模板如何能夠以某種方式添加或更改基本模板中的元素?

使用樣式完全有可能,因爲您可以簡單地添加Setters,Triggers等。唯一可以想象的模板繼承可能是將Triggers添加到基本模板。但是,在這種情況下,您必須熟悉基本模板中的元素名稱,並且基本模板中的元素名稱更改可能會破壞派生的元素名稱。更不用提可讀性問題了,在這裏你引用了衍生模板中的一個名稱,該模板在其他地方完全定義。

遲來的加法說了這麼多,就可以解決你的特定問題(儘管我現在懷疑它仍然是你的問題,甚至是一個問題)。您只需使用設置器爲您的控件定義一種樣式,即Template屬性:

<Style TargetType="<your type>"> 
    <Setter Property="Template" Value="{StaticResource <existing template resource name>}"/> 
</Style>