边框样式选择器

时间:2013-11-06 15:22:40

标签: c# wpf

我的xaml中有4个边框元素。我的viewmodel有一个状态对象,可以处于state1,state2,state3和state4。根据州,我需要绘制具有特定背景的边框。例如,如果我的状态是state1,则border1应该具有白色背景,其余应该是灰色的。如果我的状态是state2,则border2应为白色,其余为灰色,如此。

我为此目的定义了两种样式,一种用白色和另一种灰色绘制背景。问题是如何通过指定我的绑定来进行样式选择?是否有一些称为Border元素的样式选择器?或者,我该如何解决这个问题?

示例代码:

  <Border Style="{StaticResource HighlightedTileStyle}" Grid.Column="0"/>
  <Border Style="{StaticResource NonHighlightedTileStyle}" Grid.Column="1"/>
  <Border Style="{StaticResource NonHighlightedTileStyle}" Grid.Column="2"/>
  <Border Style="{StaticResource NonHighlightedTileStyle}" Grid.Column="3"/>

<Style x:Key="HighlightedTileStyle" TargetType="{x:Type Border}">
 <Setter Property="Background" Value="White"/>
 </Style>

<Style x:Key="NonHighlightedTileStyle" TargetType="{x:Type Border}">
 <Setter Property="Background" Value="Gray"/>
 </Style>

请注意,我有一个viewmodel,它有一个名为IState的状态对象,可以是State1,State2,State3和State4类型。

使用 .NET 3.5

谢谢, -Mike

2 个答案:

答案 0 :(得分:2)

您可以在DataTrigger集合中使用一些Style.Triggers

<Style x:Key="BorderStyle" TargetType="{x:Type Border}">
    <Setter Property="Background" Value="Gray"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding State}" Value="1">
            <Setter Property="Background" Value="White" />
        </DataTrigger>
        ...
        <DataTrigger Binding="{Binding State}" Value="4">
            <Setter Property="Background" Value="Green" />
        </DataTrigger>
    </Style.Triggers>
</Style>

当然,这假设BorderDataTemplate中用于包含State属性的对象类型,例如。假设此代码可以访问State属性。

答案 1 :(得分:0)

我认为你可以利用触发器实现这一目标。请参阅以下链接了解更多详情, http://msdn.microsoft.com/en-us/library/system.windows.trigger(v=vs.110).aspx