我的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
答案 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>
当然,这假设Border
在DataTemplate
中用于包含State
属性的对象类型,例如。假设此代码可以访问State
属性。
答案 1 :(得分:0)
我认为你可以利用触发器实现这一目标。请参阅以下链接了解更多详情, http://msdn.microsoft.com/en-us/library/system.windows.trigger(v=vs.110).aspx