我剛剛將我的WPF應用程序從.Net3.5更改爲.Net4。這樣做會導致我所有的全局樣式停止工作。只有使用鍵明確設置的樣式才能工作。我已經做了一些研究並找出了導致這種情況的原因,並將其轉載到一個簡單的應用程序中。WPF全局樣式與.Net4問題
我有一個簡單的WPF應用程序,只包含一個帶文本的按鈕 - 沒有樣式或其他任何東西。我爲App.Xaml的ResourceDictionary中的所有按鈕定義了一個樣式:
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
</Style>
我的按鈕現在是紅色 - 一切正常。我現在把它移到單獨的項目中的一個單獨的ResourceDictionary中。這是我想要保存所有共享樣式的位置。該按鈕仍是紅色,並且從App.xaml中我參考SharedStyles.xaml看起來是這樣的:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StyleLib;component/SharedStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
現在 - 我想StyleLib的SharedStyles.xaml來容納所有具體的樣式定義,所以我創建一個新文件在同一個名爲ButtonStyles.xaml的項目中,我在那裏添加資源。實際上 - 我另外添加了一個樣式,並且明確使用了一個鍵(技術上我稍後添加了這個,所以這與發生的問題沒有任何關係)。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
</Style>
<Style x:Key="Explicit" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Blue"></Setter>
</Style>
</ResourceDictionary>
ButtonStyles.xaml從SharedStyles.xaml引用:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StyleLib;component/ButtonStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
現在 - 我的按鈕控制不稱呼了。其實 - 它仍然在VS2010中的預覽窗口中顯示爲樣式,但是當我運行該應用程序時,它們不是樣式的。如果我明確引用帶有「顯式」鍵的樣式,他們將獲得此樣式 - 因此文件已成功包含在內。
另一個有趣的事情是,如果我現在在SharedStyle.xaml中添加另一個樣式 - 例如一個全局樣式的StackPanel(這是我試過的) - 那麼ButtonStyle.xaml內的全局風格奇妙地開始工作..!
我現在的問題是,如果我做錯了什麼,或者如果這聽起來像.Net4中的錯誤?聽起來像是一個bug ..這在.Net3.5中工作得很好!
微軟接受它作爲一個錯誤,所以猜測沒有什麼更多關於這個.. – stiank81 2010-05-03 07:03:04