Кнопка 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>