我希望能够重用此XAML,而不是制作副本并更改绑定路径。这是什么解决方案?
我想在数据网格中显示一个布尔列的勾号或十字。
<Image>
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="False">
<Setter Property="Source" Value="Images/cross.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="True">
<Setter Property="Source" Value="Images/check.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
答案 0 :(得分:2)
您可以将一个简单的Bool写入ImageSource转换器,如果转换后的值为false,则返回“false.png”;如果值为true,则返回另一个图像。
答案 1 :(得分:1)
如果绑定来源属性名称不同,请制作UserControl
或CustomControl
or as commanderz wrote, a ValueConverter
。
以下示例显示如何创建UserControl:
<UserControl ..... />
<Image>
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Status,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}" Value="False">
<Setter Property="Source" Value="Images/cross.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}" Value="True">
<Setter Property="Source" Value="Images/check.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</UserControl>
在后面的代码中,创建一个依赖项属性Status。
public partial class MyUserControl : UserControl {
public bool Status {
get { return (bool)GetValue(StatusProperty); }
set { SetValue(StatusProperty, value); }
}
public static readonly DependencyProperty StatusProperty = DependencyProperty.Register("Status", typeof(bool), typeof(MyUserControl), new UIPropertyMetadata(false));
public MyUserControl() {
InitializeComponent();
}
}
然后你可以使用用户控件然后绑定到status-property:
<local:MyUserControl Status="{Binding Status}"/>
<local:MyUserControl Status="{Binding AnotherNamedStatusProperty}"/>
如果binding-property的名称始终相同,请声明样式更全局,然后为每个所需的图像设置它。例如。将样式放在Window.Resources
- 部分并为其定义一个键(例如YourStyleKey_Style
);
<Window.Resources>
<Style TargetType="{x:Type Image}" x:Key="YourStyleKey_Style">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="False">
<Setter Property="Source" Value="Images/cross.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="True">
<Setter Property="Source" Value="Images/check.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
在您需要此类图片的xaml中,声明图片并通过Style
- 属性设置样式。
<Image Style="{StaticResource YourStyleKey_Style}"