我正尝试在我的app.xaml中为我的WPF Windows应用程序中的每个窗口设置默认样式。到目前为止,我在app.xaml中有这样的代码:
<Application.Resources>
<ResourceDictionary>
<Style x:Key="WindowStyle" TargetType="{x:Type Window}">
<Setter Property="Background" Value="Blue" />
</Style>
</ResourceDictionary>
</Application.Resources>
在运行应用程序时(但不是在VS designer中),我可以通过以下方式明确告诉窗口使用此样式,从而使窗口以此样式出现:
Style="{DynamicResource WindowStyle}
这是可行的,但并不理想。那么我该如何:
谢谢!
发布于 2009-01-20 10:34:40
补充一下Ray所说的:
对于样式,您需要提供一个键/ID或指定一个TargetType。
如果某个WPF没有明确指定的样式,它将始终使用自己的类型作为key
)来查找样式资源
如果提供TargetType,则该类型的所有实例都将应用该样式。但是,派生类型不会...看起来。<Style TargetType="{x:Type Window}">
不适用于您所有的自定义派生/窗口。<Style TargetType="{x:Type local:MyWindow}">
将仅适用于MyWindow。因此,有以下选项
。
<Application.Resources>
<Style x:Key="MyWindowStyle">
<Setter Property="Control.Background" Value="PaleGreen"/>
<Setter Property="Window.Title" Value="Styled Window"/>
</Style>
</Application.Resources> ...
<Window x:Class="MyNS.MyWindow" Style="{StaticResource MyWindowStyleKey}"> ...
样式,或者您可以从自定义BaseWindow类(具有its own quirks)派生,在该类中,您只需在Ctor/初始化/加载阶段设置一次样式属性。然后,所有派生都会自动应用该样式。但设计者不会注意到您的样式您需要运行应用程序才能看到应用的样式。我猜设计器只是运行XAML (这是自动/设计器生成的代码),所以应用了InitializeComponent,而不是自定义的XAML
所以我想说,显式指定的样式是最小的工作量。无论如何,您都可以集中更改样式的各个方面。
发布于 2012-03-28 05:11:42
我知道这是几年后的事了,但既然问题还在这里...
我将在项目下创建一个名为"Assets“的新文件夹,并将”Assets“放入其中。
参考下面的网站:Trouble referencing a Resource Dictionary that contains a Merged Dictionary“有一个错误:如果你所有的默认样式都嵌套在三层(或更深)的合并字典中,顶级字典不会被标记,所以搜索会跳过它。解决办法是将默认样式放到根字典中。”而且它似乎能可靠地解决问题。去图...
Style="{DynamicResource windowStyle}"
如上所述,步骤3和4需要在每个project.XAML文件中重复,但是,您可以在整个解决方案中获得统一的窗口!同样的过程也可以应用于任何你想要有一个统一的外观的控件,按钮,任何东西。
对于这么晚才来的任何人,希望这篇文章能有所帮助,因为我相信最初的海报几年前就已经解决了这一问题。
保罗
发布于 2009-01-10 23:23:19
设计器不工作,因为您正在指定DynamicResource。请将其更改为StaticResource,一切都会好起来的。
若要应用于所有窗口,应从样式中删除x:键。隐式设置TargetType会将x:Key设置为TargetType中的任何内容。然而,在我的测试中,这不起作用,所以我正在研究它。
如果我将TargetType设置为x: TextBlock类型,那么设计器就能完美地工作,只是窗口显示出不同的行为。
https://stackoverflow.com/questions/431940
复制相似问题