.net - .Net4 的 WPF 全局样式问题

标签 .net wpf .net-4.0 styles

我刚刚将我的 WPF 应用程序从 .Net3.5 更改为 .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 中的错误?对我来说听起来像是一个错误..这在 .Net3.5 中确实工作得很好!

最佳答案

我觉得这很奇怪。这在 .Net3.5 中确实工作得很好,我看不出它现在不应该工作的原因!

我将此作为错误报告给 Microsoft。您可以 view the bug report here .当他们确认文件时,也应该可以在那里找到解决孤立问题的源代码。

关于.net - .Net4 的 WPF 全局样式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2737040/

相关文章:

c# - 如何使 WinForms 表单在 AvalonDock 中作为 DockableContent 工作?

c# - 如何在 XAML 中定义的 Canvas 子 UIElement 上方的 Canvas 上显示绘图视觉

c# - Clay and CaSTLe 温莎 2.5

c# - 使用 Validator 时忽略 .NET 4 RTM MetadataType 属性

wpf - 如何在Wpf中打印预览?

c# - 最大化另一个正在运行的程序的窗口

c# - 如何使用绑定(bind)绑定(bind)资源目录源属性

c# - 无法安装 nuget 包 unity 2

c# - 表达式在 vb.net 应用程序中不产生值

.net - Visual Studio 2008 和覆盖现有文件扩展名的语言服务