Кнопка WPF в пути привязки сетки данных

Привет, у меня есть датагрид в WPF. Столбец - это кнопка, привязанная к значению типа int. Я хотел бы иметь путь к содержимому кнопки для привязки к пути window.resource, например, когда значение равно 0, содержимое кнопки показывает путь RightArrow, а когда значение равно 1, оно показывает LeftArrow. Как я могу это сделать? Должен ли я использовать IvalueConverter для этого? Ниже приведен мой код xaml.

 <Window.Resources>
    <Path x:Key="RightArrow" Data="M4,15V9H12V4.16L19.84,12L12,19.84V15H4Z" Fill="Black" />
    <Path x:Key="LeftArrow" Data="M20,10V14H11L14.5,17.5L12.08,19.92L4.16,12L12.08,4.08L14.5,6.5L11,10H20Z" Fill="Black" />
</Window.Resources>

<DataGrid Name="SomeDtg" >
    <DataGridTemplateColumn Header="Interchangeble?" Width = "2*">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate >
                <Button>
                    .......
                </Button>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

1 ответ

Решение

Путь это контроль. Не создавайте элементы управления как ресурсы; у них может быть только один родитель за один раз. Вы не указали название свойства, к которому привязан столбец, поэтому я назвал его EvenOddProperty,

Другой способ сделать это - создать два шаблона данных, которые отображают стрелки влево или вправо, и поменять их местами с помощью триггера. Вот как вы создаете элемент управления как ресурс: поместите его в DataTemplate, который является ресурсом. Новые экземпляры содержимого DataTemplate создаются при каждом его применении.

<Window.Resources>
    <PathGeometry x:Key="RightArrow">M4,15V9H12V4.16L19.84,12L12,19.84V15H4Z</PathGeometry>
    <PathGeometry x:Key="LeftArrow">M20,10V14H11L14.5,17.5L12.08,19.92L4.16,12L12.08,4.08L14.5,6.5L11,10H20Z</PathGeometry>
</Window.Resources>

...

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Button>
            <Path
                Fill="Black"
                >
                <Path.Style>
                    <Style TargetType="Path">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding EvenOddProperty}" Value="0">
                                <Setter Property="Data" Value="{StaticResource RightArrow}" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding EvenOddProperty}" Value="1">
                                <Setter Property="Data" Value="{StaticResource LeftArrow}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Path.Style>
            </Path>
        </Button>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
Другие вопросы по тегам