【发布时间】:2013-07-10 00:13:48
【问题描述】:
我在 WPF 中有以下按钮和样式,我需要概括 DataTrigger 部分中的绑定,因为我在同一个窗口中有近 10 个类似的按钮,并且每个按钮都应该绑定到不同的属性(SelectedPositions、SelectedAgencies、. ...)。可以实现吗?
<Button x:Name="btnPosition"
Grid.Row="0"
Grid.Column="0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Command="{Binding PositionFilterCommand}"
Content="{l:Translate position}"
Style="{StaticResource NewButtonStyle}" />
<Style x:Key="NewButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="22" />
<Setter Property="Width" Value="Auto" />
<Setter Property="FontFamily" Value="OpenSans" />
<Setter Property="FontSize" Value="13" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Margin" Value="10,2,10,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="3">
<Grid x:Name="gridButton" Background="#54728e">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image x:Name="img"
Grid.Column="0"
Width="24"
Height="24"
Source="Img/tick-white.png"
Visibility="Visible" />
<Rectangle x:Name="rect"
Grid.Column="1"
Fill="#54728e"
RadiusX="3"
RadiusY="3" />
<ContentPresenter Grid.Column="1"
Margin="5,0,5,0"
HorizontalAlignment="Stretch"
VerticalAlignment="Center" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding SelectedPositions}" Value="{x:Static sys:String.Empty}">
<Setter TargetName="rect" Property="Fill" Value="#8bbcdf" />
<Setter TargetName="img" Property="Visibility" Value="Collapsed" />
<Setter TargetName="gridButton" Property="Background" Value="#8bbcdf" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
【问题讨论】:
-
所有这些属性(SelectedPositions, SelectedAgencies, ....)是否属于同一类型?如果是这样,您可以使用按钮的附加属性或普通依赖属性,并在通用样式中检查该值,并在控件上将此 DP 绑定到每个相应的源属性。你也可以使用
Tag属性来做同样的事情,尽管这通常是不被接受的。 -
是的,这些属性属于同一类型(字符串)。每个 Button 都有自己的属性、内容和命令。拜托,你能给我一个你解释的例子吗?提前致谢。
-
是的,每个都添加了一个示例。选择并进一步研究什么是最适合您的要求。