Если свойство имя источника привязки изменяется, сделать 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>
В коде позади, создать статус зависимостях собственности.
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();
}
}
Затем вы можете использовать пользовательский контроль в любом случае и просто привязать к статус-свойства:
<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}"
Спасибо HCL. UserControl - это именно то, что мне нужно. –