我目前正在使用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和代码隐藏。
答案 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
内明确设置stroke
和Rectangle
即可。如果Resource
仅在Resource
中使用Rectangle
,则无法使用 <Rectangle Stroke="{Binding Color}">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Color}" Opacity="0.25" />
</Rectangle.Fill>
</Rectangle>
。
<div id="timerText">Timer</div>