2010-04-29 83 views
6

我剛剛將我的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中工作得很好!

回答

3

我覺得這很奇怪。這在.Net3.5中工作得很好,我看不出現在它不應該工作的原因!

我將此報告爲Microsoft的一個錯誤。你可以view the bug report here。當他們確認文件時,解決孤立問題的源代碼也應該在那裏可用。

+0

微軟接受它作爲一個錯誤,所以猜測沒有什麼更多關於這個.. – stiank81 2010-05-03 07:03:04