2017-01-16 17 views
1

因此,如果我創建了一個繼承自ContentControl的無形控件,然後將其樣式放在Generic.xaml文件中,我需要將BasedOn={StaticResource {x:Type ContentControl}}添加到該樣式才能使其工作。但是,當我做同樣的事情,從HeaderedItemsControl繼承一個無外觀的控制,我得到一個運行時異常,上面寫着'爲什麼不根據HeaderedItemsControl的工作無視樣式?

{「無法找到名爲‘System.Windows.Controls.HeaderedItemsControl’資源。資源名稱是區分敏感「}

這是奇數,因爲它是在該命名空間

enter image description here

例如代碼:。

不工作

<Style TargetType="{x:Type myControl}" 
BasedOn="{StaticResource {x:Type HeaderedItemsControl}}"> 

<Style TargetType="{x:Type myContentControl}"> 

不工作

<Style TargetType="{x:Type myControl}"> 

<Style TargetType="{x:Type myContentControl}" 
BasedOn="{StaticResource {x:Type ContentControl}}"> 

我的問題是,他們爲什麼不處理的一樣嗎?這是一個語言錯誤嗎?

+0

您的鏈接所指的是Silverlight的文檔,你確定的基準是在您的項目? –

回答

1

你說得對。按照慣例,WPF控件的默認主題樣式應該在稱爲Generic.xaml的ResourceDictionary中定義,該文件夾稱爲由定義控件類型的程序集的ThemeInfo屬性指定的程序集主題。請參閱Ian Griffiths的博客以瞭解更多信息:https://www.interact-sw.co.uk/iangblog/2007/02/14/wpfdefaulttemplate

雖然HeaderedItemsControl沒有定義主題樣式,這就是爲什麼您會遇到異常,因爲您無法將樣式放在另一個不存在的樣式上。

的HeaderedItemsControl使用相同的默認主題風格爲ItemsControl的,它從繼承,所以這將工作:

<Style TargetType="{x:Type local:myControl}" BasedOn="{StaticResource {x:Type ItemsControl}}" /> 
-1

所以我的懷疑是這是爆炸的原因是HeaderedItemsControl初始化時有一個默認的樣式。它實際上在documentation on MSDN中這樣說。

屬性值類型:System.Windows.Style

被施加到每個 項生成的容器元素的樣式。缺省值爲空。

而ContentControl中確實有一個默認的風格,在這裏看到的MSDN documentation

我一直沒能找到這個問題的任何地方記錄和錯誤是相當模糊的。不過,我認爲我的結論是合理的。

相關問題