Первое подчеркивание в DataGridColumnHeader удаляется

У меня возникла проблема, когда у меня есть DataGridColumnHeader, который получает текст с подчеркиванием в качестве содержимого, а первый символ подчеркивания скрыт, если вы не нажмете alt ( "data_grid_thing" отображается как "datagrid_thing" ). Я искал вокруг бит, и нашел некоторые решения этой проблемы для ярлыков, так как если вы превратите RecognizesAccessKey в false, тогда текст не будет считаться "AccessText" (это не работает для DataGridColumnHeader, поскольку он удаляет все остальные стили, и поэтому вместо заголовка с текстом внутри него я просто получаю пробел с текстом. Я также попытался использовать свойство BasedOn, чтобы не повлиять.

Я открыт для решений либо со стороны С# (модифицируя свойство RecognizesAccessKey, возможно, каким-то образом обнаруживая ContentPresenter), либо путем изменения XAML (выясняя способ сохранения стиля по умолчанию).

Мой XAML выглядит примерно так:

  <Style x:Key="DataGridColumnHeaderStyle" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="DataGridColumnHeader">
                    <Border>
                        <ContentPresenter 
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                            RecognizesAccessKey="False" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>   
    </Style>

Спасибо!

Ответ 2

Это из-за обработки AccessKey. Просто напишите обработчик событий, как это, чтобы временно избежать подчеркивания в заголовке datagrid.

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    string header = e.Column.Header.ToString();

    // Replace all underscores with two underscores, to prevent AccessKey handling
    e.Column.Header = header.Replace("_", "__");
}