试图在DataTemplate.Resources中使用数据绑定

本文关键字:数据绑定 Resources DataTemplate | 更新日期: 2023-09-27 18:11:57

我目前正在使用一个DataTemplate为一个组合框绑定一个颜色到矩形内的组合框。最初,我只是用颜色填充矩形,描边为黑色。

<DataTemplate>
    <Rectangle Stroke="Black" Fill="{Binding Color"}/>
</DataTemplate>

这显然是一个非常简化的代码片段。我用三种不同的颜色创建了绑定类的三个不同的实例,我可以很好地看到这三种不同的颜色。

我要做的是选择颜色并使用它作为描边和填充,将不透明度降低到25%。这是我尝试做的:

<DataTemplate>
    <DataTemplate.Resources>
        <SolidColorBrush x:Key="RectangleStroke" Color="{Binding Color}"/>
        <SolidColorBrush x:Key="RectangleFill" Color="{Binding Color}" Opacity="0.25"/>
    </DataTemplate.Resources>
    <Rectangle Stroke="{StaticResource RectangleStroke}" Fill="{StaticResource RectangleFill}"/>
</DataTemplate>

然而,当我这样做并再次创建三个具有不同颜色的绑定类实例时,我实际上看到了三次第一种颜色。出于某种原因,我认为这与使用StaticResource有关。我试着用DynamicResource代替:

<Rectangle Stroke="{DynamicResource {x:Static RectangleStroke}}"/>

但它不喜欢{x:Static RectangleStroke}部分。

如果需要,如果我的简化片段不清楚,我可以提供更多的XAML和代码隐藏。

试图在DataTemplate.Resources中使用数据绑定

我认为这与在DataTemplate中定义Resource有关。试着把你的SolidColorBrush资源移到Window范围。

<Window.Resources>
        <SolidColorBrush x:Key="RectangleStroke" Color="{Binding Color}"/>
        <SolidColorBrush x:Key="RectangleFill" Color="{Binding Color}" Opacity="0.25"/>
</Window.Resources>

或者,更好的是,在Rectangle中显式地设置fillstroke。如果Resource只在Rectangle中使用,那么使用Resource就没有意义了。

    <Rectangle Stroke="{Binding Color}">
        <Rectangle.Fill>
            <SolidColorBrush Color="{Binding Color}" Opacity="0.25" />
        </Rectangle.Fill>
    </Rectangle>