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

时间:2015-09-08 14:28:21

标签: c# wpf

我目前正在使用background: -moz-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.2) 10%, rgba(0,0,0,0) 34%, rgba(0,0,0,0) 69%, rgba(0,0,0,0.2) 90%, rgba(0,0,0,0.5) 100%), url('images/block.png') repeat 0% 0%, url('images/chef.png') no-repeat 0 0;为ComboBox将Color绑定到ComboBoxItems中的Rectangle。最初,我只是使用颜色来填充矩形,而笔划是黑色的。

DataTemplate

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

我要做的是将Color作为Stroke使用,对于Fill,将不透明度降低到25%。这就是我尝试做的事情:

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

然而,当我这样做并再次创建具有不同颜色的绑定类的三个实例时,我实际上看到第一个颜色三次。出于某种原因,我认为它与使用<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}}"/> 部分。

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

1 个答案:

答案 0 :(得分:1)

我认为这与定义Resource内的DataTemplate有关。尝试将SolidColorBrush资源移至Window范围。

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

或者,更好的是,只需在fill内明确设置strokeRectangle即可。如果Resource仅在Resource中使用Rectangle,则无法使用 <Rectangle Stroke="{Binding Color}"> <Rectangle.Fill> <SolidColorBrush Color="{Binding Color}" Opacity="0.25" /> </Rectangle.Fill> </Rectangle>

<div id="timerText">Timer</div>