Если имя свойства источника привязки меняется , сделайте UserControl
или CustomControl
или как commanderz , записанное 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:
<local:MyUserControl Status="{Binding Status}"/>
<local:MyUserControl Status="{Binding AnotherNamedStatusProperty}"/>
Если имя свойства привязки всегда одно и то же , объявите стиль более глобальным и установите его для каждого требуемого изображения. Например. поместите стиль в раздел 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}"