问题标签 [dynamicresource]

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 投票
3 回答
19531 浏览

c# - 将故事板放置在应用程序资源中

我需要在多个地方使用相同的故事板,因此我将故事板放在了我的 Application.Resources 中。当我尝试执行情节提要时,唯一的问题是我需要引用我想要制作动画的目标。这是我的故事板:

我为不同对象的高度设置动画的方式是通过更改动态资源目标。当故事板在当前窗口中时,我能够这样做。但是现在我想将它放在应用程序资源中,我不知道如何引用目标属性。


编辑

我之前发布的解决方案效果很好,但有时很难用代码创建复杂的动画。所以我想出的另一个替代解决方案是创建带有表情混合的故事板。所以我将一个随机控件拖动到表达式混合的主窗口并创建一个随机动画。假设动画如下:

然后我复制该代码并将其粘贴到我的工作窗口中,而不是在 APP.XAML 中。

然后在我的代码中假设我有一个:

出于某种原因,变换组必须在那里才能为对象设置动画。无论如何,假设我的工作窗口中有那个边界,我想用我用表情混合创建的相同动画来制作它。我将在代码中做的是:

然后我可以在我的工作窗口上为该边框设置动画。这样做的好处是我能够将相同的动画应用于多个对象(我认为这是创建资源的目的)当我尝试将情节提要放在资源字典或 app.xaml 中时,问题就来了文件。当我这样做时,c# 能够找到情节提要,但情节提要的属性是只读的,因此我收到错误:


我想这样做的原因是将相同的动画应用于多个对象。一个变通的解决方案是使用代码构建基本动画,然后将更复杂的动画(如缓动函数等)保存为资源。让我告诉你我的意思。

在我的资源文件中,我放置了以下资源:

在表达式混合中,您可以构建更复杂的缓动功能。然后使用后面的代码,我将创建一个基本的故事板:

这使我能够在多个对象上使用相同的故事板。

0 投票
1 回答
524 浏览

wpf - ResourceDictionary 更改如何导致 DynamicResource 重新评估?

如果 Resources 字典不可观察,DynamicResource 引用如何工作?资源字典的 Add / Remove 方法是否具有内部代码,可以“轮询”所有 DynamicResource 引用并在删除或添加它们时刷新它们?

0 投票
1 回答
1593 浏览

wpf - 通过 WPF 中的绑定动态设置资源样式

我正在尝试使我的应用程序的配色方案动态化,以便我可以在确定我的应用程序配色方案的属性(希望来自数据库)中有一个颜色值。

我有一个 Resources.xaml 文件,我在其中设置应用程序的颜色和样式,然后在我的所有控件和窗口中使用它们。我想将资源文件中 SolidColorBrush 的颜色绑定到我的 ViewModel(s) 中的属性,以便此颜色可以根据当前应用程序值更改。这是我到目前为止所拥有的,但它不起作用,所以我一定错过了一些东西。

Resources.xaml 文件中的代码:

MainWindow.xaml 文件中的代码:

我的 MainWindow.xaml 的 DataContext 是一个名为 ApplicationViewModel 的类,它继承自 ViewModelBase,它有一个属性“MainApplicationColor”,返回字符串“Teal”,以改变 SolidColorBrush 的颜色,使其与 FallbackValue 不同。我现在正在对颜色进行硬编码,但这是我希望将来从数据库中获取价值的地方。颜色目前没有改变,所以我假设我的绑定源有问题,因为它显然没有像我认为的那样工作。

谢谢,

克拉拉

0 投票
2 回答
6442 浏览

wpf - 从转换器返回动态资源

我想根据布尔的状态更改 WPF 控件的颜色,在这种情况下是复选框的状态。只要我使用 StaticResources,它就可以正常工作:

我的控制

我的转换器:

问题是我有几个依赖于设置白天模式或夜间模式的资源“WarningColor”定义。这些事件不会触发 WarningColor 更改。有没有办法让返回值动态化,还是我需要重新考虑我的设计?

0 投票
1 回答
1461 浏览

wpf - WPF 中的代码隐藏静态/动态属性和命名难题

我在我的 XAML 中定义了一个按钮,它有一个按钮样式和一个矢量图形,它是这样定义的:

在我的代码隐藏中,我有一种方法可以动态地将与此类似的新按钮添加到 StackPanel。简而言之,它做了一些事情:

现在这是奇怪的部分——它只显示矢量图形,后面没有按钮。当我删除倒数第二行(带有矢量参考的行)时,它会显示按钮的样式!我假设设置模板会覆盖样式,但是它们似乎在 XAML 中友好地播放。我也尝试设置 ContentProperty instidead of TemplateProperty,但这导致了类型的字符串。有任何想法吗?谢谢!

0 投票
2 回答
3978 浏览

wpf - 带有 FixedPage 的 WPF 动态资源查找行为

具有以下非常简单的 xaml:

在这里使用动态资源(我在更复杂的情况下实际上需要)不起作用。使用静态资源将 TextBlocks 着色为所需的颜色。将资源移动到 FixedPage 的级别也可以解决问题。但我想在顶级元素上有一个通用资源字典(因为用户可以对颜色、字体等进行运行时更改)。将资源放在应用程序级别也确实有效。但这不是一个很好的选择。

任何人都知道为什么这不起作用。它与 TextBlock 向上的逻辑树有关吗?

MSDN 资源概述指出:

查找过程在设置属性的元素定义的资源字典中检查请求的键。

  • 如果元素定义了 Style 属性,则检查 Style 中的 Resources 字典。
  • 如果元素定义了 Template 属性,则检查 FrameworkTemplate 中的 Resources 字典。

查找过程然后向上遍历逻辑树,到达父元素及其资源字典。这一直持续到到达根元素。

根据上述MSDN的解释,我还尝试将Brush和Style放入(虚拟)样式的资源中。但这也没有用。

真的有感觉,这不可能那么复杂,但很可能是我监督的东西。任何帮助表示赞赏。

编辑

将 TextBlock 命名为“tb”然后使用 tb.FindResource("TestStyle") 会引发异常。因此,显然无法找到该资源。如果我检查 LogicalTreeHelper.GetParent(tb) 并为找到的父母重复该操作,我会得到预期的结果: TextBlock > FixedPage > PageContent > FixedDocument ...

编辑2

这很完美。与之前预测的 XAML 有什么区别?

编辑3

无法解析放置在文本框的 Foreground 属性上的动态资源(实际资源位于 FixedDocument.Resources 级别)。同样在代码后面使用 TryFindResource 来自 pc (PageContent) 但来自 fp (FixedPage) 和 tb (TextBlock) 它无法解析资源(obj 为空)。在 XAML 标记中使用静态资源时,一切正常。

0 投票
1 回答
520 浏览

wpf - 如何为 ConverterParameters 启用动态蒙皮

当某些需要皮肤修改的项目不支持 DynamicResourceExtention 类型的值时,启用 WPF 应用程序动态皮肤的最佳方法是什么?特别是,我们的问题是 ConverterParameters 需要 StaticResourceExtentions。

这是我们使用 Visual Studio 2008 和 WPF 3.5 使用 ConverterParameters 的情况。

我们有一个自定义转换器,它接受一个值和一个参数并简单地返回他们的产品。非常简单,工作正常,我们将它用于各种任务,包括设置一些窗口元素大小。例如,传递“Source={x:Static SystemParameters.PrimaryScreenHeight}”的值和“0.1”的参数使我们能够将元素的高度设置为屏幕高度的 1/10。

其中 PctConverter 是对我们自定义转换器的资源引用。那里没问题。

现在我们想通过提取 ConverterParameter 并将其放入单独的资源中动态地为应用程序设置皮肤。例如,我们可能希望元素高度在某些皮肤中为屏幕高度的 0.1,而在其他皮肤中为屏幕高度的 0.25。最初我们认为我们只需将 ConverterParameter 设置为 DynamicResource,但这不支持,因此我们必须使用 StaticResourceExtension 设置它,如下所示:

其中 OurElementHeightParameter 在单独的 ResourceDictionary(称为 MainResource.xaml)中定义如下:

(其中命名空间定义为 xmlns:sys="clr-namespace:System;assembly=mscorlib"。)

就提取 CustomParameter 而言,这很好用,但它仍然无法让我们通过动态交换皮肤来更改 ConverterParameter。

在对此进行了更多研究之后,特别是以下文章

如何将 wpf 资源分配给其他资源标签

使用一种颜色作为另一种颜色的静态资源进行蒙皮

别名资源

我们认为我们现在需要做的是获取我们的 StaticResourceExtention 并使用资源别名在幕后动态设置它的值。

为了做到这一点,我们将之前的 OurElementHeightParameter 资源替换为以下两个资源

效果很好,产生了相同的结果。

当一切正常时,我们认为将 SkinnedHeightRatio 资源放置在单独的 ResourceDictionary(称为 Skin.xaml)中并将其与原始 MainResource.xaml ResourceDictionary 合并是一件简单的事情,我们将拥有我们所追求的动态皮肤。

但是,一旦我们提取<sys:Single x:Key="SkinnedHeightRatio">0.1</sys:Single>到另一个 ResourceDictionary,我们就会遇到如下构建错误:

未知的构建错误,“索引超出范围。必须是非负数且小于集合的大小。

更奇怪的是,如果我们将上面的两个资源保存在同一个 ResourceDictionary 中,并通过在它们之间放置另一个随机资源来分隔它们,例如

然后 OurElementHeightParameter 指向其正上方的 SomeRandomResource,而不是其 ResourceKey 属性 (SkinnedHeightRatio) 中指定的资源,后者仅在其上方 2 行...在这种情况下,传递给转换器的参数是厚度 SomeRandomResource。

一切都非常混乱,让我们认为我们完全找错了树。那么我们哪里错了?

如果有人需要重现该问题的应用程序的完整代码,我可以将其发布。

任何指针都非常感谢。

0 投票
1 回答
483 浏览

c# - Expander IsExpanded 从动态资源,如果手动更改不再起作用

经过大量搜索后,我想出了这段代码来按代码扩展我的扩展器:我是 XAML/WPF 的新手,所以很可能我可以以更好的方式做到这一点,但经过大量搜索后,我很高兴我能正常工作(但还没有完全)

XAML:将此添加到“标题”

然后将此添加到 Window.Recources

这是扩展器的一部分(扩展器是在 Listview 中的数据模板中制作的)

我可以向此列表视图添加多个项目,因此制作了多个扩展器。在 c# 中,我使用以下代码:

现在的问题是,例如。我在列表视图中有 5 个项目,我想查看 1 的扩展版本,我用一个按钮将它们全部折叠(这可行)并在列表视图中手动展开我想要的项目(展开以查看更多信息),但是在我之后我刚刚手动展开的那个不会对“全部展开”或“全部折叠”按钮做出反应。

先感谢您。

0 投票
3 回答
1600 浏览

.net - 动态资源颜色不起作用

我有以下代码:

和一个包含颜色的 TabItem Style

事实证明我不能DynamicResourceEasingColorKeyFrame.
我该怎么做才能达到我的效果?

我需要动态设置颜色,因此只需交换"{DynamicResource SelectedColor}"即可"{StaticResource SelectedColor}"

我创建了一个小解决方案来演示这个问题 - 选定的选项卡应该是金色的,但它实际上是透明的,因为我猜 VSM 无法解析名为“ SelectedColor”的颜色

http://dl.dropbox.com/u/10557283/DynamicBug.zip

0 投票
1 回答
2152 浏览

wpf - 如何通过 xaml 更改动态资源值(例如触发器)

例如,我有元素的样式,并且我想使用触发器更改特定资源

可能吗?