2010-08-18 2 views
2

Я хотел бы иметь возможность повторно использовать этот XAML вместо того, чтобы делать копию и изменять путь привязки. Какое решение для этого?Повторное использование кода 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> 

ответ

1

Если свойство имя источника привязки изменяется, сделать UserControl или CustomControlor 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}" 
+0

Спасибо HCL. UserControl - это именно то, что мне нужно. –

2

Вы могли бы написать простой Bool в ImageSource конвертер, whiich вернуться бы «false.png», если преобразованное значение ложно, а другое изображение, если значение истинно.

Смежные вопросы