Повторное использование кода XAML (логическое связывание с изображением) - PullRequest
2 голосов
/ 18 августа 2010

Я хотел бы иметь возможность повторно использовать этот 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>

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

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

1 голос
/ 18 августа 2010

Если имя свойства источника привязки меняется , сделайте 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}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...