<DataTemplate x:Key="dataTempl">
<!--<Border BorderBrush="Coral" BorderThickness="1" Width="Auto" Margin="2">-->
<Button Background="{Binding background}" Name="btn" Tag="{Binding oID}" Click="btn_Click" Style="{StaticResource MetroButton}" Margin="1">
(... rest of items here ...)
</StackPanel>
</Button>
<!--</Border>-->
</DataTemplate>
如您所见,按钮具有样式和背景。资源样式包含边框,背景(渐变)等。 现在我班上的背景元素:
public Brush background
{
get
{
SolidColorBrush clr = null;
if (backgroundString != "")
{
clr = new SolidColorBrush((Color)ColorConverter.ConvertFromString(backgroundString));
}
return clr;
}
}
但问题是,它可能包含#FFFF0000之类的颜色或只是null。 我想做的是:
if(backgroundString!=“”) - &gt;申请背景
否则就像之前一样留下风格。
但是代码我告诉你,如果它返回null,样式确实会改变(没有边框等)。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
你想做的是一个触发器。
您希望使用默认背景,但在给定属性满足给定条件时覆盖它。 您可以使用触发器轻松完成此操作。
只需在视图模型中添加此属性:
public bool OverrideBackground { get { return backgroundString != ""; } }
然后在DataTemplate
中添加以下触发器:
<DataTemplate>
[...]
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding OverrideBackground}" Value="true">
<Setter Property="Button.Background" Value="{Binding background}" TargetName="btn"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
当DataTrigger
属性为true(即OverrideBackground
时)时,backgroundString != ""
将被激活,并将设置Background
的{{1}}属性(在代码片段中将Button
命名为)绑定视图模型的btn
属性的值。