仅当元素包含背景(十六进制)时才更改DataTemplate

时间:2014-04-07 14:23:51

标签: c# wpf background datatemplate

                                                                                                                                                                 

<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,样式确实会改变(没有边框等)。

有什么想法吗?

谢谢!

1 个答案:

答案 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属性的值。