DataGridColumnHeader中的第一个下划线被删除

Stu*_*art 14 c# wpf user-interface xaml

我有一个问题,我有一个DataGridColumnHeader接收带下划线的文本作为内容,第一个下划线是隐藏的,除非你按alt("data_grid_thing"显示为'datagrid_thing').我搜索了一下,为标签找到了一些解决这个问题的方法,因为如果你将RecognizesAccessKey变为false,那么该文本将不会被视为'AccessText'(.但是这不适用于DataGridColumnHeader,因为它删除了所有其他样式,因此在其中包含文本的标题,我只是得到带文本的空格.我尝试使用BasedOn属性也没有效果.

我对C#方面的解决方案持开放态度(通过某种方式通过某种方式找到ContentPresenter来修改RecognizesAccessKey属性),或者通过修改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>
Run Code Online (Sandbox Code Playgroud)

谢谢!

pho*_*oog 12

这篇博文说你可以通过加倍来逃避下划线:"data__grid_thing".

另一种方法可以在这个问题的公认答案中找到

  • 遗憾的是,修改字符串不是一种选择。 (2认同)

小智 8

这是因为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("_", "__");
}
Run Code Online (Sandbox Code Playgroud)