试图在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
中定义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
中显式地设置fill
和stroke
。如果Resource
只在Rectangle
中使用,那么使用Resource
就没有意义了。
<Rectangle Stroke="{Binding Color}">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}" Opacity="0.25" />
</Rectangle.Fill>
</Rectangle>