我在
WPF中有一个Window,它只包含一个Frame元素.框架显示一个页面;显示哪个页面会根据用户交互进行更改.
<Window x:Class="MyWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="720" Width="1280"> <Grid> <Frame Source="{Binding Source={StaticResource MainPageIntent},Path=Path}"/> </Grid> </Window>
我希望该框架中出现的所有页面共享一个共同的资源字典,以便它们可以以通用方式进行样式设置.
<Page.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/ResourceDictionaries/BaseControlStyles/MenuStyle.xaml"/>
我希望我可能只能在Window上设置资源字典,他们会“继承”这些资源,但事实并非如此.我尝试过这样的东西,但是在MenuStyle.xaml中找到的样式不会应用于Frame加载的页面内的控件:
<Window x:Class="MyWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="720" Width="1280"> <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/ResourceDictionaries/BaseControlStyles/MenuStyle.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <Grid> <Frame Source="{Binding Source={StaticResource MainPageIntent},Path=Path}"/> </Grid> </Window>
是否有办法在Window级别定义样式,以便在子Frames中加载的所有页面都将使用这些样式?
注意:我不想将这些样式应用于我的应用程序中的所有窗口,因此将此ResourceDictionary放在我的App.xaml中似乎不是一个有效的解决方案.
解决方法
如果你想编写一次以避免代码重复,你可以在后面的代码中编写它.在ContentRendered框架上,您可以编写代码以将资源添加到正在加载的页面.
<Frame Name="fr_View" ContentRendered="fr_View_ContentRendered"/> private void fr_View_ContentRendered(object sender,System.EventArgs e) { ResourceDictionary myResourceDictionary = new ResourceDictionary(); myResourceDictionary.source = new Uri("Dictionary1.xaml",UriKind.Relative); (fr_View.Content as System.Windows.Controls.Page).Resources.MergedDictionaries.Add(myResourceDictionary); }