c# – 在WPF中将ResourceDictionary应用于Frame中的Pages

我在 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>

我希望该框架中出现的所有页面共享一个共同的资源字典,以便它们可以以通用方式进行样式设置.

现在我在这个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);
}

看看这个链接
Set up application resources from code

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...