微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐