问题标签 [resourcedictionary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1975 浏览

c# - C#/WPF:添加 Window.Style,即使 ResourceDictionary 已经存在

我正在尝试将两个 Datatriggers 添加到我的 WPF 窗口中。通常,这将通过添加

到 Window.Resources。在这种情况下,我已经有了

在里面。有没有办法从那里覆盖定义?

非常感谢!

干杯

0 投票
3 回答
8514 浏览

wpf - 复合 WPF (Prism) 模块资源数据模板

鉴于我有一个 shell 应用程序和几个使用 Microsoft CompoisteWPF (Prism v2) 的单独模块项目......

收到命令后,模块会创建一个新的 ViewModel 并通过区域管理器将其添加到区域中。

我认为我可以在模块中创建一个资源字典并设置一个数据模板来显示加载的视图模型类型的视图(见下面的 xaml)。但是当视图模型被添加到视图中时,我得到的只是打印出来的视图模型命名空间。

编辑:

我可以通过添加到 App.xaml 来让它工作

这很好,但这意味着随着新模块的创建,需要添加 App.xaml 文件。我正在寻找的是模块的一种方式,因为它们加载以动态添加到 Application.Resources。这可能吗?

0 投票
2 回答
9263 浏览

c# - 扩展/覆盖资源字典中的样式

我在 WPF 应用程序的单独 dll 中有一个 BaseSkin 和多个 UserSkins。

根据谁在使用应用程序,基本皮肤和其中一个用户皮肤将合并到资源字典中并加载以供应用程序使用。

我的目标是能够在 BaseSkin 文件中指定样式,然后在特定的 UserSkin 文件上能够覆盖它,从而更改我需要的任何属性。

我知道我可以通过使用像这样的 BasedOn 属性来实现这一点:

根据:

用户:

问题是现在元素必须有一个 CustomButtonBg 的样式,这实际上可能没有实现。有没有办法让两种样式使用相同的键(ButtonBg),当它们合并时,应用程序首先在 User 中查找名为 ButtonBg 的样式,如果不存在,则使用 base 中的样式?

我在想,如果我可以在 BasedOn 属性中给出程序集名称以指向 BaseSkin 文件,那么当我给它们相同的键时,我可以避免命名错误,但我找不到任何方法来做到这一点。其他选项是即使没有任何更改也只强制执行每种样式,或者在皮肤中以编程方式检查,但这些是最后的手段。

0 投票
1 回答
2750 浏览

wpf - 如何使用 DLL 中存在的 ResourceDictionary 设置 XAML 窗口的样式?

您好我正在尝试在 DLL 中创建可重用的 XAML 窗口。

我在 Themes 文件夹中放置了一个新的 ResourceDictionary(我什至将它合并到 Generic.xaml 中),但是当我尝试在窗口中使用它的样式时,我收到一条错误消息,指出该样式不存在:

我得到一个例外,这种样式不存在,它们都在 Themes 文件夹中的 ResourceDictionary 中声明。

0 投票
5 回答
45383 浏览

wpf - 引用包含合并字典的资源字典时遇到问题

我有一个库 CommonLibraryWpfThemes,其中包含多个资源字典 XAML 文件。我的 Themes/Generic.xml 文件包含一个 ResourceDictionary.MergedDictionaries 声明,它将所有其他文件合并在一起。

通用的.xaml

在我的应用程序项目中,我引用了 CommonLibraryWpfThemes,并且在我的 App.xaml 文件中明确引用了 Generic.xml。

App.xaml - 失败

这行不通。运行我的应用程序时出现以下错误:

如果我将 Generic.xaml 的内容直接放入 App.xaml 中,一切正常:

App.xaml——成功


也许我以错误的方式处理这个问题。我的目标是让从多个应用程序中引用我的所有主题资源变得容易,而不必列出所有单独的文件。有推荐的方法吗?(注意:我不想在多个主题之间切换——我只有一个主题。)

作为奖励,如果有人能告诉我如何在不破坏 Visual Studio 设计器的情况下引用外部库中的资源,那就太好了。

谢谢。

编辑:

我尝试将 ResourceDictionary 包装在 ResourceDictionary.MergedDictionary 元素中,但这也不起作用(我得到了同样的错误):

0 投票
3 回答
17383 浏览

wpf - 如何覆盖全局样式(没有 x:Key),或者将命名样式应用于所有以类型为目标的控件?

我声明了一种我想应用于项目中所有按钮的样式,该样式位于 ResourceDictionary 中:

现在,在某些窗口中,我想继承这种风格,但添加一个值:

问题是它没有从全局样式继承,为了继承我必须为全局样式分配一个键:

然后在窗口的 XAML 中继承(或/和覆盖 - 可选)它:

问题是,如果您分配一个键,它不是全局的,您必须在每个窗口/范围内调用它。

我的问题的解决方案应该是两者之一(我还有什么遗漏的吗?):

  1. 具有带键的全局样式,该样式会自动应用于整个应用程序中的所有目标控件。
  2. 一种在没有和覆盖它的情况下引用 ResourceDictionary 级别的未命名样式的方法。

我考虑过在命名样式(在 ResourceDictionary 中)附近重新声明实际有效的样式:

但我正在寻找比愚蠢地重新声明所有样式更好的东西。

0 投票
3 回答
7450 浏览

c# - 如何在运行时将已在 XAML ResourceDictionary 中定义的路径多次添加到 WPF 表单?

我在 XAML 中有一个定义的路径:

我想将它添加到 WPF 网格中并像这样工作一次:

但是,如果我在按钮单击事件上添加此代码,然后单击按钮两次,则会引发错误说明

“指定的视觉对象已经是另一个视觉对象的子对象或 CompositionTarget 的根。”

然后我尝试创建资源的两个实例,但我继续收到相同的错误。以下是我用于此测试的代码:

因此,如何在运行时将已在 ResourceDictionary 中定义的 XAML 路径多次添加到 WPF 表单?

0 投票
2 回答
592 浏览

wpf - 同一程序集中 WPF 和 Silverlight 的资源

我有多个 WPF 应用程序使用的单独程序集中的资源,这工作正常。现在我正在创建一个 Silverlight 3 应用程序并尝试使用相同的程序集来获取相同的资源。在添加引用时出现错误,说只能引用 Silverlight 程序集。
对我来说最好的方法是什么?我必须有 2 组单独的资源程序集 - 一组用于 WPF,另一组用于 Silverlight?我不想维护两个不同但相同的资源程序集......

谢谢

注意:“添加链接”文件解决了跨多个程序集共享相同 xaml 的问题。但是,对我来说,一个主要缺点是 Blend 3 不支持此功能!Blend 不断尝试在项目树中本地查找文件。

0 投票
2 回答
672 浏览

silverlight-3.0 - Silverlight 3:合并资源字典 - 来自非嵌入式文件

我有一个 SL3 应用程序,我的客户希望能够为他们的客户设计皮肤。

我不希望每个客户都有单独的 xap。我希望能够为每个客户定义一个资源字典。

我是否可以为所有客户拥有相同的 xap 并指向我将在运行时为客户合并的外部 xaml 文件(资源字典)。

还是我必须为每个嵌入资源字典的客户构建不同版本的 xap?

  • 迈克尔
0 投票
1 回答
751 浏览

wpf - 链接的主题/Generic.xaml 文件在 Visual Studio 2008 中不起作用

我有一个正在做的项目,我需要在 silverlight 和 WPF 程序集之间共享代码问题是,即使 wpf 程序集是该文件的所有者,并且 silverlight 程序集只有一个指向该文件的链接,所有构建行动是页面一切都是正确的。如果我将silverlight组件设为所有者,则silverlight可以工作,而wpf不会,并且目前wpf是所有者,我根本没有收到任何错误,它只是永远不会像找不到控件那样设置控件样式..

注意:两个项目都存在于同一个解决方案中。

这个场景构建并运行良好

wpf项目

|__主题

这种情况会构建并运行,但如果我将它们从链接更改为正常,它将不会显示控件,它将正常工作。

我只想分享这个源代码,而不是让同一个文件有多个版本。

银光计划

|__主题

对不起我的老生常谈的树视图表示

+++++++ 更新 +++++++++

我注意到在使用任何链接文件时,无论它是 silverlight 还是 WPF,链接文件都不会构建到资源中的 Themes 文件夹中,只有根目录。我使用反射器来查看我的资源在编译程序集(包括链接文件)后的最终位置,并且它们最终位于根目录中,因此可以这么说。如果这确实是非预期行为,有没有办法防止这种情况或解决这个问题。

我真的很想弄清楚这一点,因为它已经让我发疯了一段时间。