【发布时间】:2011-01-27 00:46:33
【问题描述】:
我有一个简单的 WPF 窗口,上面有 12 个按钮。我希望将相同的样式应用于所有这些。此代码产生相同的错误:
<Window x:Class="TestApp.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestWindow" Height="400" Width="500"
WindowStyle="None" WindowState="Maximized">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/AllResources.xaml"/>
<ResourceDictionary>
<Style TargetType="{x:Type Button}">
<Setter Property="FontSize" Value="100"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="1" Name="Button1"/>
<Button Grid.Column="1" Content="2" Name="Button2"/>
</Grid>
</Window>
第一个按钮没有应用样式,但第二个按钮可以。我可以设置一个键并在每个按钮上使用它,但我更愿意让 WPF 为我处理。我刚刚在写这篇文章时发现,当我不包含外部 ResourceDictionary 时,它会按预期工作。这将在未来成为一个问题,因为我的应用程序扩展,因为我有多个需要共享相同资源的窗口。修改后的代码如下:
<Window x:Class="TestApp.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestWindow" Height="400" Width="500"
WindowStyle="None" WindowState="Maximized">
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="FontSize" Value="100"/>
</Style>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Content="1" Name="Button1"/>
<Button Grid.Column="1" Content="2" Name="Button2"/>
</Grid>
</Window>
如果我(而不是删除合并的字典)添加一个 x:Key="key" 属性,然后将该样式显式分配给每个按钮,它也可以工作。
这里有什么问题?为什么第一个跳过“Button1”而第二个不跳过?
【问题讨论】:
-
什么--?你是对的!我以前从未见过这种情况。 +1 以获得很好的可重现代码示例。
-
听起来像是 WPF 中的一个错误。我记得单条目资源字典实际上存在问题。您能否尝试在包含该样式的资源字典中再添加一个(虚拟)项目? (我现在没有编译器。)
-
当我有 2 个按钮时,我遇到了同样的问题,每个按钮都有一个堆栈面板和 2 个标签。第一个标签不会得到样式,但其他 3 个会。该死的 WPF 错误...有人知道我如何提交错误报告吗?
标签: wpf resources styles resourcedictionary