在解析 XAML 之前将静态 ResourceDictionary 添加到 UserControls

2023-12-20

我有一个 WPF 控件,我想在我的 WinForms 应用程序中的多个位置(使用 ElementHost)使用该控件(=> 该控件的多个实例)。

此外,我希望 UserControl 的所有实例共享一个 ResourceDictionary 实例。

在 WPF 应用程序中,我将通过将 ResourceDictionary 合并到应用程序资源中来实现这一点。

但是,我不想在我的 WinForms 应用程序中创建 WPF 应用程序实例。 相反,我正在寻找另一种方式。

我找到了一个解决方案,但我希望您知道一种不需要任何代码的更好方法:

    public static class StaticRDProvider
{
    static ResourceDictionary rd;
    static StaticRDProvider()
    {
        var uri = new Uri("WpfControls;Component/GlobalResourceDictionary.xaml", UriKind.Relative);
        rd = (ResourceDictionary) Application.LoadComponent(uri);
    }

    public static ResourceDictionary GetDictionary
    {
        get { return rd; }
    }
}

用户控件.xaml.cs:

    public partial class MyCustomUserControl : UserControl
{
    public MyCustomUserControl()
    {
        Resources.MergedDictionaries.Add(StaticRDProvider.GetDictionary);

        InitializeComponent();
    }
}

这样可行。但我更喜欢仅适用于 XAML 的解决方案。另外我希望能够使用 StaticResources。因此,在控件初始化后将静态 ResourceDictionary 添加到控件 MergedDictionaries 并不是一种选择。

我尝试了以下操作,但它引发了一个奇怪的“堆栈为空”异常:

<UserControl x:Class="WpfControls.MyCustomUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:WpfControls="clr-namespace:WpfControls" mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>                
            <x:Static Member="WpfControls:StaticRDProvider.GetDictionary"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

</UserControl.Resources>
<Grid>
</Grid>

也许有人知道更好的方法。

谢谢, 双生习惯


您是否尝试将 RD 加载到 UserControl 中,就像使用 Application 类一样?

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>                
            <ResourceDictionary Source="WpfControls;Component/GlobalResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

这样,您只需在用户控件中指定 URI,即可完全避免静态成员的麻烦。

顺便说一句,如果 RD 与 UserControl 不在同一程序集中,请确保使用正确的 URI 语法。例如:pack://application:,/YourAssembly;component/Subfolder/YourResourceFile.xaml (有关包 URI 的更多信息 http://msdn.microsoft.com/en-us/library/aa970069%28VS.85%29.aspx)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在解析 XAML 之前将静态 ResourceDictionary 添加到 UserControls 的相关文章

  • 从网络位置读取文件

    我在网络驱动器上共享的文件夹中有一堆文件 我正在尝试将这些文件访问到我的代码中 但它给出了一个错误 用户代码未处理 System IO DirectoryNotFoundException Fname txtwbs Text Directo
  • 使用 AppDomains 并行化非线程安全 DLL

    我有一个非托管 C DLL 我的 NET 应用程序通过 p invoke 使用它 我从这个 DLL 中需要的方法相当耗时 我想并行化方法调用 问题是它使用了一堆静态和全局变量 因此它不是线程安全的 并且无法更改 我的计划是通过从多个 App
  • Visual Studio 2013 未发现单元测试

    我在 Visual Studio 2013 中有一个简单的解决方案 它由一个 Web 项目 一个库项目和一个单元测试项目组成 当我打开解决方案并尝试运行单元测试时 Visual Studio 不会发现它们 要运行测试 我尝试转到菜单并选择
  • WCF 每个端点有不同的身份验证方法

    我有 WCF 服务 我的服务有 2 个端点 每个端点都有不同的联系人 该服务使用自定义用户名身份验证 在 的 customUserNamePasswordValidatorType 属性中定义 问题是两个端点将使用相同的身份验证方法 无论如
  • 在大型数据绑定 ObservableCollection 中添加/删除许多项目,而无需冻结 GUI

    我和我的团队正在开发一个 WPF 应用程序 该应用程序显示多个并发 XamDataChart 控件 由 Infragistics 提供 每个图表都绑定到不同的 ObservableCollection 最多可包含 200 万个点 对于每个图
  • 将 KeyUp 作为参数传递 WPF 命令绑定文本框

    我有一个文本框 KeyUp 事件触发器连接到 WPF 中的命令 我需要将按下的实际键作为命令参数传递 该命令执行得很好 但处理它的代码需要知道按下的实际键 记住这可能是一个回车键或不仅仅是一个字母的任何键 所以我无法从 TextBox te
  • 类型“MyApp”已包含“MystatusBar”的定义

    我的应用程序 XAML
  • GDI+ 中绘图坐标的硬界限是什么?

    我这样渲染插值曲线 e Graphics DrawLines new Pen Color Red interpolationPoints ToArray 有时会抛出 OverflowException 对 interpolationPoin
  • Prism自定义确认交互

    我使用 Prism Unity WPF 和 Mvvm 在应用程序中创建了一个自定义确认窗口 我需要有关需要发送回视图模型的通知的帮助 我在详细记录视图中有这个 我们称之为 MyDetailView
  • C# 中将一个字符串拆分为另一个字符串

    我一直在使用Split 分割字符串的方法 但这似乎仅在您按字符分割字符串时才有效 有没有办法分割一个string 另一个字符串是按参数分割的 我尝试将拆分器转换为字符数组 但没有成功 换句话说 我想分割string THExxQUICKxx
  • .net MVC 将 MP4 流式传输到 iDevice 问题

    我一直在编写用于提供视频服务的一段代码 但遇到了一些问题 代码如下 public ResumingFileStreamResult GetMP4Video string videoID if User Identity IsAuthenti
  • 使用 Visual Studio 2012 在 wpf 工具包中找不到 AutoCompleteBox

    这确实是一个想要的功能 AutoCompleteBox 显然不是 AutoCompleteComboBox 但是 Visual Studio 2012 找不到 AutoCompleteBox 控件 但我没有在早期版本的vs中尝试过 所以这可
  • GC.Add MemoryPressure() 如何知道要向哪个对象添加内存压力?

    我最近需要使用GC 添加内存压力 http msdn microsoft com en us library system gc addmemorypressure aspx令我感到奇怪的是 它不接受添加内存压力的对象作为参数 我认为因为它
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • 如何添加重试以调用 Web 服务?

    我有一个应用程序调用使用 wsHttpBinding 的 Web 服务 我需要在连接超时等情况下对 Web 服务调用实现某种重试功能 执行此操作的最佳方法是什么 我已经阅读过有关 WS ReliableMessaging 的内容 但这不是
  • Windows 8 和 LOB 应用程序

    为 Windows 8 构建业务线应用程序的推荐方法是什么 例如复杂的定制财务应用程序 它们显然不适合 Metro 风格 因此可能会成为常规桌面应用程序 那么建议使用WPF吗 有 vNext 吗 我作为开发人员构建的应用程序类型是桌面风格的
  • .NET JIT 编译的代码缓存在哪里?

    NET 程序首先被编译为 MSIL 代码 当它被执行时 JIT编译器会将其编译为本机机器代码 我想知道 这些JIT编译的机器代码存储在哪里 它只存储在进程的地址空间中吗 但由于程序的第二次启动比第一次快得多 我认为即使在执行完成后 该本机代
  • TPL 数据流块下游如何获取源生成的数据?

    我正在使用 TPL Dataflow 处理图像 我收到处理请求 从流中读取图像 应用多次转换 然后将生成的图像写入另一个流 Request gt Stream gt Image gt Image gt Stream 为此 我使用块 Buff
  • WPF 路径:如何在 XAML 中绘制它?

    我想创建一个带有非矩形标题的自定义 GroupBox 如下图所示 正如你所看到的 标题的内容必须是可参数化的 因此可以在xaml中输入图像 标题和背景 提前致谢 谢谢您的回答 实际上我想在自定义组框中使用这个设计 所以在你的答案中 如果我不
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐

  • 读取注册表项的性能?

    我想知道通过标准 C 库从 Windows 注册表读取注册表值需要多长时间 以毫秒为单位 在这种情况下 我正在阅读一些代理设置 我应该期望什么数量级的值 有没有好的基准数据可用 我正在运行 WS2k8 R2 amd64 加分点 操作系统 s
  • Django REST框架范围过滤器

    如何在 Django REST Framework 中对日期和数字进行范围过滤 其他过滤器 lt gt 等 工作正常 我尝试了很多变体 例如 import rest framework filters as filters class Or
  • 如何在 PHP 中将查询字符串转换为斜杠 URL?

    我想将 URL 转换为 http localhost projectname api index php type login to http localhost projectname api login Convert在这里不是一个常用
  • 如何统计Apache Flink在给定时间窗口内处理的记录数

    在flink中定义一个时间窗口后如下 val lines socket timeWindowAll Time seconds 5 如何计算该特定 5 秒窗口内的记录数 执行计数聚合的最有效方法是ReduceFunction 然而 reduc
  • 引用 jssc 库的可运行 jar 无法满足链接错误

    我们正在创建一个可运行的 java jar 来在 beagleboneblack 运行 ubuntu 上运行 我们创建了一个可运行的 jar 它可以在我们的 mac 和 pc windows 上运行良好 但不能在 ubuntu 系统上运行
  • Skype for Business URI 而不是 Skype

    因为我们可以选择通过提供 URI 来打开 Skype 中的链接 skype xyz call 我们可以做类似的事情来实现相同的功能 但它会在 Skype for Business 中打开吗 请告诉我 Cheers 经过大量研究后找到了解决方
  • 为什么Linq GroupBy在OrderBy之后驳回了订单操作?

    我有一个Action模型与Session导航属性 考虑这段代码 var x db Actions OrderBy p gt p Session Number ThenBy p gt p Date it s OK x 是一个有序的 Actio
  • 在 JasperReports 中以任意角度旋转文本

    我在用iReport生成pdf 我需要以任意角度旋转文本 正如我在文档中读到的那样 iReport可以将文本旋转 90 180 270 和 360 度 我也想要它的动态值 为此 我尝试了这些过程 但没有得到预期的结果 使用自定义 jar 旋
  • 删除列表项时出现意外的索引错误[重复]

    这个问题在这里已经有答案了 我是 Python 初学者 我以前学过其他语言 比如C 初学者 和JQuery 但我发现 python 中的循环非常混乱 好吧 我想实现一个简单的结果 程序将循环遍历单词列表 然后删除与first两个字母与列表中
  • 带有 MVC4 模型绑定的 Angular JS 因日期/日期时间而失败?

    当使用 Angular JS 将复杂对象的日期时间和日期时间回发到服务器时 值未正确绑定 我尝试过 JSON stringify 无济于事 我已经发布了一个相关问题 但可能太笼统了 我真正需要知道的是如何正确传递这些日期 我目前正在做的是使
  • 检测 NSString 中的电话号码

    我想从 NSString 中提取电话号码 例如 在字符串中致电约翰 994 456 9966 我想提取994 456 9966 我尝试过类似的代码 NSString nameRegex d 3 s d 3 s d 4 NSPredicate
  • 使用 IIS7 URL 重写模块强制使用 HTTPS 并避免重复的 URL

    我需要强制每个请求https www mysite com https www mysite com 始终带有 https 和 www 该网站托管在 GoDaddy 中 我需要通过 IIS7 URL 重写模块来完成此操作 我已经能够使用以下
  • 维护asp.net、C#中Fileupload控件的值

    我在更新面板中使用 Fileupload 和 3 个下拉控件 3 个下拉列表将在下拉所选索引更改事件上回发 即 国家 州和城市 根据国家 州和城市从数据库获取值 问题是 回发时 文件名路径将从文件上传控件中消失 如预期 或默认属性 我正在将
  • DocuSign Connect Webhook 不包括 HMAC 标头

    我已经参考过this https stackoverflow com questions 56673644 docusign connect webhook call did not include hmac header x docusi
  • Inno Setup 和 VC Redistributable 并优雅地处理退出代码 3010

    In my CurStepChanged我有一些安装 Visual Studio Redistributable 的代码 如果需要 代码片段 if bVcRedist64BitNeeded then begin if Exec Expand
  • 如何将栅格更改为特定的空间分辨率?

    我想更改光栅的分辨率 例如 我们以 此 Landsat 7 图像分辨率约为 30m library terra gt terra 1 5 21 f lt system file tif L7 ETMs tif package stars r
  • Maven 在发布时不会复制未跟踪的资源

    我的问题是关于使用 maven 进行发布时要包含在 jar 文件中的资源 我正在使用 Maven 来构建我的项目 当我运行时 mvn package 资源包含在输出 jar 中 但当我跑步时 mvn release prepare mvn
  • ASP.NET 4 MVC 的身份模拟未按预期工作

    我正在为我们的分析师构建一个 Intranet MVC 4 应用程序 目标是允许内部用户访问此应用程序 而无需登录 因为他们是我们内部网络的一部分 当他们访问应用程序时 我希望能够捕获他们的 Windows 用户名并使用 LDAP 检查活动
  • document.getElementById()如何搜索DOM树?

    我知道有些浏览器 现在大多数 会用一个 ID 来创建所有元素的哈希表 因此在这种情况下 对 document getElementById 的调用只能搜索哈希表 但是在 DOM 树的上下文中它将如何执行此操作 例如 它是深度优先搜索吗 我这
  • 在解析 XAML 之前将静态 ResourceDictionary 添加到 UserControls

    我有一个 WPF 控件 我想在我的 WinForms 应用程序中的多个位置 使用 ElementHost 使用该控件 gt 该控件的多个实例 此外 我希望 UserControl 的所有实例共享一个 ResourceDictionary 实