Первое подчеркивание в DataGridColumnHeader удаляется - PullRequest
13 голосов
/ 23 февраля 2012

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

Я открыт для решений либо через сторону C # (изменяя свойство 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 ]

12 голосов
/ 23 февраля 2012

В этом сообщении в блоге говорится, что вы можете избежать подчеркивания, удвоив его: "data__grid_thing".

Другой подход можно найти в принятом ответе на этот вопрос

7 голосов
/ 09 июля 2014

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

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("_", "__");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...