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

标签 wpf data-binding resourcedictionary

我在 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/

相关文章:

wpf - 为什么 KeyUp 和 KeyDown 事件变慢?

c# - WPF:如何使用自定义窗口制作 native 窗口控制按钮?

c# - 不可捕获的异常

c# - 即使成功采用了路径,图像也不会显示-MVVM WPF

wpf - 将 WPF 路径转换为位图文件

c# - 为什么我不能在应用程序启动时调用 'new Window().ShowDialog()' 2 次?

c# - 将图像添加到列表框

c# - ComboBox 数据绑定(bind)问题

c# - 如何在启动时删除 App.xaml ResourceDictionary?

wpf - 单独库中的嵌套资源字典