0

我的 xaml 中有 4 个边框元素。我的视图模型有一个状态对象,它可以处于 state1、state2、state3 和 state4。根据状态,我需要用特定背景绘制我的边框。例如,如果我的状态是 state1,那么边框 1 应该有白色背景,其余的应该是灰色的。如果我的状态是 state2,那么border2 应该是白色的,其余的应该是灰色的,依此类推。

为此,我定义了 2 种样式,一种用白色绘制背景,另一种用灰色绘制。问题是如何通过指定绑定来进行样式选择?是否有一种叫做样式选择器的东西可用于 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>

请注意,我有一个视图模型,它有一个称为 IState 的状态对象,它可以是 State1、State2、State3 和 State4 类型。

使用.NET 3.5

谢谢,-迈克

4

2 回答 2

2

您可以为此使用集合DataTrigger中的一些 s :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>

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

于 2013-11-06T15:41:12.653 回答
0

我认为你可以利用触发器来实现这一点。有关更多详细信息,请参阅以下链接, http: //msdn.microsoft.com/en-us/library/system.windows.trigger (v=vs.110).aspx

于 2013-11-06T15:39:13.443 回答