问题标签 [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 回答
21816 浏览

silverlight - 以编程方式访问 ResourceDictionary 项

我有一个名为“MySilverlightControls”的 Silverlight 控件程序集。几个文件夹进入该程序集我有一个类,它扩展了第三方供应商的网格列,我们称之为“MyImageColumn.cs”。

我还创建了一个名为 的资源字典Generic.xaml,它位于Themes程序集的文件夹中。在该资源字典中,我定义了一个名为MyImageColumnTemplate的 ControlTemplate :

我的问题是:从 MyImageColumn 中,如何以编程方式引用/加载此控件模板,以便将其分配给列上的属性?我希望使用与此类似的语法:

但这总是返回 null。当我在 Reflector 中加载程序集时,我看到Generic.xaml文件在那里,资源的名称是MySilverlightControls.g.resources,其中的路径是themes/generic.xaml.

我究竟如何才能找到此资源字典中的各个项目?

0 投票
1 回答
2237 浏览

wpf - XAML - MergedDictionaries 抛出 XmlParseException“项目已被添加”。为什么?

我有以下非常容易重现的问题:我正在创建一个使用来自另一个文件的资源的 xaml 应用程序。要走的路是创建一个 MergedDictionaries-tag 来合并本地和全局资源,如下所示:

如果你运行这段小代码,它会崩溃:

如果我们删除 MergedDictionaries-tag,代码将按预期运行:

我不明白为什么当我们使用合并资源时它会抛出异常。当然,修复现在很容易(将资源移动到较低级别)。很高兴知道这是否是“正常”行为......

0 投票
2 回答
1593 浏览

wpf - ResourceDictionary element or UserControl?

I have some XAML to draw a logo and I want to re-use this in various other XAML files (it has no UI and requires no code). The top level of the logo XAML is a Canvas item.

To use the logo in other XAML files is it best to define this logo as an element in a ResourceDictionary or create a UserControl?

This seems easy with a UserControl, however I want to load my XAML files in with XamlReader so I would prefer to use resources so that these can be specified within the XAML. It seems possible to store items such as a Canvas in a ResourceDictionary but I am not sure how to reference them.

For example, I can define my logo as a ResourceDictionary element as follows:

But how can I use this Logo in my other XAML files - maybe I have got the wrong idea about resources?

0 投票
1 回答
2898 浏览

wpf - 从另一个程序集为 WPF 中的 UserControl 设置样式

我在应用程序程序集中定义了一个 WPF 用户控件。我正在尝试根据另一个(皮肤或主题)程序集中的样式来设置用户控件的样式。我不希望包含所有样式的资源字典的主题/皮肤程序集引用应用程序程序集。有没有办法做到这一点?例如

WPF应用程序集

MyUserControl.xaml <- WPF 用户控件

主题大会

MyStyles.xaml <- WPF 资源字典

我想我可以使用

在 MyStyles.xaml 资源字典中,并使用:

在 WPFApplication 程序集中使用 MyUserControl.xaml 的任何窗口中

但是,我更愿意在 MyStyles.xaml 资源字典中定位自定义用户控件:

这可能吗??

0 投票
1 回答
2155 浏览

c# - WPF - C#:此元素当前未与任何上下文关联

我有一个 WPF UserControl,我在 ElementHostControl 内的 WinForms 控件中使用它。然后我启动一个 WPF 窗口,而 Windows 窗体仍处于打开状态。如果我然后关闭 WPF 窗口,并尝试将子元素添加到我的 WPF 用户控件,它会在(子元素的)“InitializeComponent()”处崩溃,但以下情况除外:

“System.Configuration.dll 中发生了‘System.Configuration.ConfigurationErrorsException’类型的第一次机会异常。附加信息:此元素当前未与任何上下文相关联”

我发现它为什么会发生,但我不知道如何解决这个问题。如果我省略此代码:

那么一切都很好。不过我需要它,因为我的 ResourceDictionary(以及我定义的样式和模板)在整个 WPF 窗口和控件中不可用。这是我在这里发现的

有什么方法可以结合两全其美?保留我的 ResourceDictionary,同时防止应用程序崩溃?

0 投票
6 回答
5774 浏览

wpf - 从 ResourceDictionary 中绑定到祖先

我怎样才能UserControl从它的内部绑定到它的属性ResourceDictionary?我希望我在资源中声明的对象DataContextUserControl它包含的对象相同:

在运行时我收到错误:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='UserControl', AncestorLevel='1''. BindingExpression:Path=DataContext; DataItem=null; target element is 'SomeClass' (Name=''); target property is 'DataContext' (type 'Object')

0 投票
1 回答
3106 浏览

wpf - WPF:跨程序集共享资源

之前发布了一个Themes/generic.xaml关于使用和ComponentResourceKey标记扩展在程序集之间共享资源的问题。该解决方案运行良好,但它要求所有共享资源都位于generic.xaml资源字典中。我的变得相当大,所以我想我会使用合并的字典generic.xaml来组织东西。

到目前为止,我没有运气。我使用上一篇文章中的演示运行了一些测试,一旦我将资源移动到合并字典,ComponentResourceKey就会失败,并抱怨它找不到合并字典的源文件。

有没有其他人得到这个工作?如何?谢谢你的帮助。

0 投票
2 回答
6392 浏览

wpf - (WPF) 如何从 ResourceDictionary 将 sys:Double 的值设置为 SystemFonts.MessageFontSize?

设想:

我想为我的 WPF 应用程序使用 3 种标准字体大小:BigFontSizeNormalFontSizeSmallFontSize. 这些是双精度值,它们在资源字典中定义为(sys适当定义的位置):

这很好用。但我随机选择了 14 作为正常尺寸。我想要的是获得系统定义的字体大小NormalFontSize。(如果完成了,我可以使用此处描述的转换器来获取BigFontSizeSmallFontSize相对于NormalFontSize


线索:

我从文档中发现默认字体大小存储在静态属性 (double)SystemFonts.MessageFontSize中。但是我应该怎么做才能将该值检索到资源字典?(我知道BindingDynamicResource不能应用。但是,嘿,这是一个静态值,所以我该如何应用StaticResourcex:Static什么?)

我试过了

两者似乎都不起作用(如预期的那样)。我收到一条错误消息Cannot add content to object of type 'System.Double'.

笔记:

  • 我不想从代码中执行此操作,例如从 App()。(是否可以为 ResourceDictionary 提供代码隐藏?)
  • 我不想将其封装为可以派生其他样式的通用样式(使用BasedOn),因为我有几个资源字典,并且无法使用DynamicResourcewithBasedOn
    也就是说,我不能使用

    因为,如果我在其他 ResourceDictionary 中有一个样式,比如说HeaderTextBlockStyle,那么我将不得不使用BasedOn={DynamicResource BigFont}这是不可能的(我认为)

任何帮助将不胜感激。
谢谢你。

标签: WPF SystemFonts.MessageFontSize ResourceDictionary FontSize BasedOn DynamicResource

0 投票
2 回答
6693 浏览

silverlight - 尝试使用 ResourceDictionary,但其中的样式显示为未找到

我有一个名为 MyClassLibrary 的 Silverlight 类库。

在其中,我有一个名为 MyControl 的用户控件。

在控件中,我定义了用户资源:

该控件使用如下样式:

这一切都很完美,ComboBox 提供了正确的样式,所以我知道样式写得正确。

我真正想要的是将样式放在资源字典中,以便该程序集中的多个不同控件可以使用它。所以我在同一个程序集中创建了一个资源字典。我称之为 ResourceDictionary.xaml。

我将样式定义从我的用户控件移动到资源字典。

那么资源字典看起来像这样:

控件的用户资源现在如下所示:

并且控件仍然以与以前完全相同的方式使用样式。

现在我知道它正在查找 ResourceDictionary.xaml 文件,因为我尝试将“Source”属性更改为 NonExistentFile.xaml,但它抱怨找不到该文件。它不会对 ResourceDictionary.xaml 提出投诉,所以我认为它正在找到它。

但是,当我运行该应用程序时,我收到“找不到具有名称/键组合框样式的资源”的错误。

我究竟做错了什么?这看起来很简单,但它不起作用。

提前感谢您能给我的任何帮助。

0 投票
2 回答
10151 浏览

wpf - 如何引用在另一个库的单独程序集中定义的 WPF 样式键

我有两个库和一个应用程序程序集项目布局,我想知道如何通过它们在另一个库中定义的库中的键来引用样式。

我的解决方案布局:

  • WpfControls.dll - 包含通用的可重用控件,例如基于 WPF 的 NumericUpDown 控件以及其他基本控件和一些我希望使其可重用的样式。为了这个例子,假设我的样式键在这里定义为MyButtonStyle
  • SpecializedControls.dll - 保存专门用于我们的应用程序的控件,例如 WPF 中的自定义复合控件和 UserControl。这是我想引用WpfControls.dll 程序集中定义的MyButtonStyle样式的地方。
  • Application.exe - 此程序集使用在 SpecializedControls.dll 程序集中定义的控件。

我已经看到一些示例解释了如何使用简单的单个控件库和应用程序程序集来做到这一点,但在我的情况下,我有两个程序集和一个应用程序。所以换句话说,在我的情况下,我的第二个控件库中没有 App.xaml,我可以在其中使用 MergeDictionaries 概念。我很确定如果我想我可以将 MergedDictionaries 引用直接放在每个控件 XAML 文件中以合并 WpfControls.dll 程序集中定义的所有 Generic.xaml 但我的猜测是这会导致样式被冗余合并到各个地方在我的 SpecializedControls 程序集中,这似乎不是最好的解决方案。更糟糕的是,这些字典也可能被合并到 Application.exe 中,这是否会在运行时开始使我的应用程序膨胀?

任何人都可以澄清以最少的程序和资源开销共享此类样式的推荐或最佳方法吗?

更新:经过更多测试后,即使在同一个程序集中,我似乎也无法通过它的键来引用 Generic.xaml 中定义的任何资源。我如何理解资源密钥的工作方式可能完全错误,因此我必须进行更多研究并研究 ComponentResourceKey。如果有人有任何提示或建议,请提供帮助。