WPF Prism -在哪里放置资源

本文关键字:资源 在哪里 Prism WPF | 更新日期: 2023-09-27 18:18:37

我有一个棱镜应用程序和各种模块。我想知道哪里是最好的地方找到资源,如样式,画笔,控制模板,数据模板?

我应该做一个单一的资源字典,并把所有的东西?每个模块都应该有自己的资源吗?还是每个视图?我想遵循Prism的目标,保持一切模块化,但我也不认为在每个模块中重新声明相同的资源有什么意义…

WPF Prism -在哪里放置资源

我使用Prism开发应用程序,我使用的技术非常接近Prism手册中描述的技术。这是你的应用程序。基础设施项目,通常在这里放置所有共享接口等。所以:

  1. 我只是添加项目YourApplication。资源
  2. 创建文件夹主题
  3. 为每组资源在Themes文件夹中创建单独的xaml文件(如Generic.WPF.xaml用于标准WPF控件的样式,Generic.Brushes.xaml用于画笔等)
  4. 创建文件Themes'Generic。Xaml(确切地说是这个名字,它将在未来带来巨大的好处),内容类似

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Generic.Brushes.xaml"/>
            <ResourceDictionary Source="Generic.WPF.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    
  5. 现在你可以添加这些资源在任何模块(你有单独的项目,对吧?)通过添加引用到YourApplication。资源,并添加到视图的xaml:

    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <!-- Put your not shared resource here -->
        </ResourceDictionary>
    </UserControl.Resources>
    

我不知道,也许这种方式有一些问题,但它有效,对我来说很有效。如果有人能以这种方式发表评论(赞成或反对),我会很高兴听到的!

应用程序范围的资源我通常放在ResourceDictionary中,它被添加到App.xamlStartupWindow.xaml

特定视图的资源通常位于视图中。例如,用于CalendarView的UserControl将包含日历的任何自定义资源,例如日历特定的画笔,样式,模板等。

我通常不认为有理由使模块范围的资源,但如果我曾经做过,我有一个ResourceDictionary模块,可以加载到应用程序的合并字典在运行时,或包含在模块中的单个视图。

我想分享一些新的知识。我正在使用@chopikadze方法。这是一个很酷的方法。谢谢你!

但是,如果您不想每次都为每个控件编写这些代码:

<UserControl.Resources>
    <ResourceDictionary>    
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
        </ResourceDictionary.MergedDictionaries>    
        <!-- Put your not shared resource here -->    
    </ResourceDictionary>
</UserControl.Resources>

然后你可以在BootstrapperApp.xaml中声明<ResourceDictionary/>,像这样:

<Application.Resources>        
    <ResourceDictionary Source="pack://application:,,,/YourApplication.Resources;component/Themes/Generic.xaml"/>
</Application.Resources>