C# WPF DataGrid 以编程方式更改单元格图标资源
C# WPF DataGrid change cell icon resource programmatically
我以前从未在 C# 中使用过 DataGrid(并且很少使用 C#),而且我正在努力更改我在 XAML 中设置的 DataGrid 单元格图标。默认情况下,它设置为 appbar_question 的动态资源,在满足某些条件后,我希望能够将其更改为 appbar_check 的资源(我正在使用 mahapps 图标)。
XAML代码
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn HeaderStyle="{StaticResource CenterMe}" Header="Website" Binding="{Binding Website}">
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTemplateColumn HeaderStyle="{StaticResource CenterMe}" Header="Status" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="ShowStatus">
<Button.Template>
<ControlTemplate>
<Rectangle Width="16" Height="16" Fill="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_question}" />
</Rectangle.OpacityMask>
</Rectangle>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
首先,我尝试直接访问单元格,但我看到 WPF 中的 DataGrids 像您一样绑定到一个对象,然后将它们作为项目访问并更改该对象中的属性。但是我尝试这样做但无法弄清楚如何绑定到我的对象中的资源?
尝试使用 DataTemplate.Triggers:
1. 为您的 VisualBrush 命名:
<VisualBrush x:Name="myBrush"...
添加DataTemplate.Triggers:
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding to_my_property}" Value="my_condition">
<Setter TargetName="myBrush" Property="Visual" Value="{DynamicResource appbar_check}"/>
</DataTrigger>
</DataTemplate.Triggers>
希望对您有所帮助。
我以前从未在 C# 中使用过 DataGrid(并且很少使用 C#),而且我正在努力更改我在 XAML 中设置的 DataGrid 单元格图标。默认情况下,它设置为 appbar_question 的动态资源,在满足某些条件后,我希望能够将其更改为 appbar_check 的资源(我正在使用 mahapps 图标)。
XAML代码
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn HeaderStyle="{StaticResource CenterMe}" Header="Website" Binding="{Binding Website}">
<DataGridTextColumn.CellStyle>
<Style>
<Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTemplateColumn HeaderStyle="{StaticResource CenterMe}" Header="Status" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="ShowStatus">
<Button.Template>
<ControlTemplate>
<Rectangle Width="16" Height="16" Fill="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}">
<Rectangle.OpacityMask>
<VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_question}" />
</Rectangle.OpacityMask>
</Rectangle>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
首先,我尝试直接访问单元格,但我看到 WPF 中的 DataGrids 像您一样绑定到一个对象,然后将它们作为项目访问并更改该对象中的属性。但是我尝试这样做但无法弄清楚如何绑定到我的对象中的资源?
尝试使用 DataTemplate.Triggers: 1. 为您的 VisualBrush 命名:
<VisualBrush x:Name="myBrush"...
添加DataTemplate.Triggers:
<DataTemplate.Triggers> <DataTrigger Binding="{Binding to_my_property}" Value="my_condition"> <Setter TargetName="myBrush" Property="Visual" Value="{DynamicResource appbar_check}"/> </DataTrigger> </DataTemplate.Triggers>
希望对您有所帮助。