.Net4的WPF全局样式问题

sti*_*k81 6 .net wpf styles .net-4.0

我刚刚将.Net3.5的WPF应用程序更改为.Net4.这样做会导致我的所有全局样式停止工作.只有使用键明确设置的样式才有效.我做了一些研究,找出了导致这种情况的原因,并在一个简单的应用程序中重现了它.

我有一个简单的WPF应用程序,只包含一个带文本的按钮 - 没有样式或其他任何东西.我为App.Xaml的ResourceDictionary中的所有按钮定义了一个样式:

<Style TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Red"></Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

我的按钮现在是红色 - 一切都很好.我现在将其移动到单独项目中的单独ResourceDictionary中.这是我想要保留所有共享样式的地方.该按钮仍为红色,我从App.xaml到SharedStyles.xaml的引用如下所示:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>              
           <ResourceDictionary Source="/StyleLib;component/SharedStyles.xaml"/> 
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

现在 - 我希望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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

现在 - 我的按钮控件不再设置样式了.实际上 - 它仍然在VS2010的预览窗口中显示为样式,但是当我运行应用程序时,它们没有被设置样式.如果我使用键"Explicit"显式引用样式,它们将获得此样式 - 因此成功包含该文件.

另一个有趣的事情是,如果我现在在SharedStyle.xaml中添加另一个样式 - 例如StackPanel的全局样式(这是我尝试过的) - 那么ButtonStyle.xaml中的全局样式神奇地开始工作..!

我现在的问题是,如果我做错了什么,或者这听起来像.Net4中的错误?对我来说听起来像个错误..这在.Net3.5中运行得很好!

sti*_*k81 3

我觉得这很奇怪。这在 .Net3.5 中确实工作得很好,而且我看不出为什么它现在不应该工作!

我将此作为错误报告给 Microsoft。您可以在此处查看错误报告。当他们确认该文件时,具有孤立问题的解决方案的源代码也应该在那里可用。