gpt4 book ai didi

wpf - 在 ResourceDictionary 内的共享 WPF 资源中启用数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 14:41:38 25 4
gpt4 key购买 nike

我在 WPF 中使用了 M-V-VM 模式,并且我有一个我将经常使用的背景画笔,我想将它移到一个共享的 ResourceDictionary 中。

唯一的问题是画笔使用了一种颜色,它通过数据绑定(bind)到它的托管上下文中。

无论如何,我可以将刷子移到 ResourceDictionary 并让它找到它需要的值吗?

刷子:

<RadialGradientBrush>
<RadialGradientBrush.RelativeTransform>
<TransformGroup>
<ScaleTransform CenterX="0.5"
CenterY="0.5"
ScaleX="2.3"
ScaleY="2.3" />
<TranslateTransform X="-0.3"
Y="-0.3" />
</TransformGroup>
</RadialGradientBrush.RelativeTransform>
<GradientStop Color="{Binding Path=BackdropColor}"
Offset="1.2" />
<GradientStop Color="#FFFFFFFF"
Offset="-0.1" />
</RadialGradientBrush>

在将其重新分解为 ResourceDictionary 并添加一个键后,我将其称为:
<StackPanel Grid.Row="0"
Margin="0,0,0,0"
Orientation="Horizontal"
Background="{DynamicResource BackdropRadGradBrush}">

但这导致调试器中出现以下输出:

System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。绑定(bind)表达式:路径=背景颜色;数据项=空;目标元素是 'GradientStop' (HashCode=16001149);目标属性是“颜色”(类型“颜色”)

最佳答案

我不认为你可以保留这个 Brush在您的资源字典中并使用绑定(bind)来提取颜色。由于画笔只创建一次(这就是为什么你首先希望它在资源字典中),在创建时 WPF 不知道它将在哪里使用,所以它不能拉入值颜色。

例如,如果颜色保留在“设置”中,那可能会起作用-但我猜这对您没有帮助,因为您可能希望在使用它的每个控件上更改颜色(否则,您可以只对颜色进行硬编码,否则它已经在设置中)。

也许你可以创建一个 RadialGradientBrush子类,并公开第一个 GradientStop颜色为 DependencyProperty ?然后,您可以在任何需要的地方创建此子类的实例,并使用绑定(bind)在此处提取正确的颜色。

关于wpf - 在 ResourceDictionary 内的共享 WPF 资源中启用数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com