我希望我的应用程序中的子窗口从其父窗口继承WPF依赖项属性。
如果我在主窗口上设置TextOptions.TextRenderingMode =“ClearType”(我正在使用WPF 4),该值将应用于窗口的所有子控件。 如何使这些值也适用于所有子窗口? (将所有者设置为我的主窗口的窗口实例)
我希望能够在主窗口上简单地更改渲染模式,并且更改应该适用于整个应用程序。
答案 0 :(得分:1)
如果您想将其设置一次并离开,只需在<ResourceDictionary>
标记内的App.xaml中添加一种样式:
<ResourceDictionary>
...
<Style TargetType="{x:Type Window}">
<Setter Property="TextOptions.RenderingMode" Value="ClearType">
</Style>
...
</ResourceDictionary>
如果您确实希望能够随时间变化,可以绑定到主窗口:
<ResourceDictionary>
...
<Style TargetType="{x:Type Window}">
<Setter Property="TextOptions.RenderingMode" Value="{Binding MainWindow.(TextOptions.RenderingMode), Source="{x:Static Application.Current}">
</Style>
...
</ResourceDictionary>
并确保明确地在主窗口中设置它以避免自我引用:
<Window TextOptions.RenderingMode="ClearType" ...>
现在,对主窗口的TextOptions.RenderingMode的任何动态更改也会影响所有其他窗口。但是一个简单的固定样式最适合大多数用途。
如果您不关心它是否受主窗口值的控制,还有动态绑定它的其他解决方案,例如您可以在样式中使用{DynamicResource ...}
或绑定到静态对象的属性
<强>更新强>
如果使用Window子类而不是普通的Window对象,只需在App.xaml中为Window添加样式就不起作用。
要允许您定义的样式应用于所有Window子类,请在 InitializeComponent()之后将以下OverrideMetadata调用添加到App的构造函数(通常在App.xaml.cs中):
public App()
{
InitializeComponent();
FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata
{
DefaultValue = FindResource(typeof(Window))
});
}
答案 1 :(得分:0)
您可以使用style resource为多个窗口提供相同的属性。