如何在WPF应用程序(包括模板)中定义公用资源?

 皇家城市_579 发布于 2023-02-07 16:56

我正在寻找一种定义WPF资源(目前用作静态资源)的方法,该资源可从我的应用程序中的任何位置访问。

我的资源在此资源字典中定义:


    

选择此问题的答案表明,我必须将该资源字典合并到我的App.xaml文件中(名为的项目AppWideResources):


    
        
            
                
            
        
    

起初,这似乎有效;该窗口中的按钮以适当的扁平样式设计,带有超厚边框:


    
        

但是,一旦在控件模板中使用共享资源,此操作就会停止:

我(出于此问题的目的,对此进行了极其简化)控制:

using System;
using System.Windows;
using System.Windows.Controls;

namespace AppWideResources
{
    public class MyControl : Control
    {
        static MyControl()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(typeof(MyControl)));
        }
    }
}

...以及相应的Themes\Generic.xaml文件:



    


然后将此控件插入到我的窗口中:


    
        

如果运行此命令,XamlParseException则会引发a,表示flatButtonStyle找不到静态资源。

我发现的唯一解决方法是将公共资源字典显式合并到控制模板的本地资源字典中:


    
        
            
                
            
        
    
    
        

但是,这不仅冗长且容易出错,而且具有几行冗余代码(我的实际项目包含很多模板化控件,而不仅仅是一个),我还担心通过多次加载静态资源来浪费系统资源(包括一次CommonResources.xaml。(该关注点是否合理?还是WPF每次加载特定资源字典时都使用相同的实例?)

因此,问题是:使WPF资源(包括控件模板)遍及整个应用程序的正确方法什么?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有