Excel のような列のフィルタリングと並べ替えを実装しようとしています。これを行うために、DataTemplate を使用して列ヘッダーを定義しました。
<DataGrid x:Name="dataGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CanUserSortColumns="False">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="23"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button x:Name="ExcelFilterButton" Tag="{Binding}" Click="ExcelFilterButton_Click" Margin="0,0,0,0" BorderThickness="0" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" Focusable="False" Grid.Column="0">
<Image Source="Resources\NoSortNoFilter.png" Width="19" Height="19" />
</Button>
<TextBlock Text="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
</DataGrid>
そして、それはうまく出ます。
VisualTreeHelper を使用して列ヘッダーから画像を見つけようとしましたが、Header プロパティは文字列です。HeaderStyle および HeaderTemplate プロパティも使用してみましたが、役に立ちませんでした。
Snoop と呼ばれる WPF Spy プログラムを使用すると、そこに画像が表示されますが、コードでアクセスする方法がわかりません。コードでアクセスする必要があるのは、その列が並べ替えられているかフィルター処理されているかに基づいて画像を変更するためです。(これは XAML で実行できますか?)