【问题标题】:Enable data binding in shared WPF resources inside a ResourceDictionary在 ResourceDictionary 内的共享 WPF 资源中启用数据绑定
【发布时间】:2009-05-31 15:13:48
【问题描述】:

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

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

无论如何我可以将画笔移到 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。绑定表达式:路径=背景颜色;数据项=空;目标元素是 'GradientStop' (HashCode=16001149);目标属性是“颜色”(输入“颜色”)

【问题讨论】:

    标签: wpf data-binding resourcedictionary


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      这有点晚了,但请看看使用StaticResourceDynamicResource 而不是Binding - 这将允许您访问另一个资源。不完全是Binding,但总比没有好。

      【讨论】:

      • 这听起来像是如果我使用 DynamicResource 调用它可能会工作......然后在 StackPanels.Resources 属性中指定它可能吗?我会测试一下,看看我能找到什么。回答关于 SO 的问题永远不会太晚!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多