我是WPF项目的新手,我对组件MahApps.Metro有疑问。 我在项目中创建了一个MainWindow和其他窗口,我的问题是:如何将MainWindow中的相同主题应用到项目的其他窗口?而且,我必须为所有窗口应用ResourceDictionary,或者只存在一次这样做吗?
谢谢你们!
答案 0 :(得分:1)
在App.xaml
中,设置ResourceDictionary
属性,如下所示:
<Application.Resources>
<ResourceDictionary Source="MyResourceDictionary.xaml"/>
</Application.Resources>
请注意,为了将资源字典中的样式应用于该类型的所有控件,样式不应具有键。例如,一个定义如下的样式:
<Style TargetType="{x:Type Button}">
<Setter Property="Content" Value="This is the default button text"/>
</Style>
在ResourceDictionary
中,会导致项目中的所有按钮在创建时都具有默认值。
答案 1 :(得分:1)
WPF中的资源基于其可用的“范围”工作。 Check this article for a detailed explanation
现在Application
(App.xaml)的范围更广,为Window
。因此,要在Window
之间共享这些MahApps控制资源,只需将ResourceDictionary
移至Application.Resources
范围
类似的东西:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colours.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
现在您不再需要在每个窗口中添加这些字典,因为它们是隐式可用的