この記事は公開から2年以上経過しています。
問題
WPFのDataGridヘッダに含まれる(最初の)アンダースコア_
が表示されない。
検証コード
MainWindow.xaml.cs
using System.Linq;
using System.Windows;
namespace WPFDataGridHeaderTest211207
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new
{
Items = Enumerable.Range(0, 10).Select(n => new Data { ID_COLUMN = n, DATA_COLUMN = $"Data{n}" })
};
}
public sealed class Data
{
public int ID_COLUMN { get; set; }
public string DATA_COLUMN { get; set; }
}
}
}
MainWindow.xaml
<Window
x:Class="WPFDataGridHeaderTest211207.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WPFDataGridHeaderTest211207"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="DataGridHeaderTest"
Width="400"
Height="300"
mc:Ignorable="d">
<Grid Margin="5">
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Items, Mode=OneWay}" />
</Grid>
</Window>
対応前のDataGridヘッダ
原因
ヘッダテキストのアンダースコアがアクセスキーとして扱われる。
対応前のビジュアルツリー(Snoop)
対応
アンダースコアがアクセスキーとして処理されないようにDataGridColumnHeaderのContentTemplateを作成する。
※アクセスキーを使用したい場合は別途対応が必要。
MainWindow.xaml
<Window
x:Class="WPFDataGridHeaderTest211207.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WPFDataGridHeaderTest211207"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="DataGridHeaderTest"
Width="400"
Height="300"
mc:Ignorable="d">
<Grid Margin="5">
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Items, Mode=OneWay}">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding Mode=OneWay}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
</DataGrid>
</Grid>
</Window>
対応後のDataGridヘッダ
対応後のビジュアルツリー(Snoop)
ちなみに、このような一見良くわからない問題でも過去のエントリ「WPF開発が捗るツール」で紹介しているツールSnoop
を使えば、あっという間に解決できます。
以上です。