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

标签 c# wpf xaml user-interface

我遇到了一个问题,我有一个 DataGridColumnHeader,它正在接收带有下划线的文本作为内容,并且第一个下划线是隐藏的,除非你按 alt(“data_grid_thing”显示为“datagrid_thing”)。我四处寻找位,并为标签找到了解决此问题的一些方法,因为如果您将 RecognizesAccessKey 设置为 false,则文本将不会被视为“AccessText”(。但这对 DataGridColumnHeader 不起作用,因为它删除了所有其他样式,因此,我得到的不是带有文本的 header ,而是带有文本的空格。我也尝试使用 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>

谢谢!

最佳答案

这是因为 AccessKey 处理。只需编写这样的事件处理程序即可暂时转义数据网格 header 中的下划线。

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("_", "__");
}

关于c# - DataGridColumnHeader 中的第一个下划线被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9403782/

相关文章:

c# - 如何在 jquery 中创建 JSON 字典数组?

c# - 冒泡事件未发生

c# - 如何有条件地绑定(bind)数据?

c# - listview添加新的item控件

wpf - 在 DataTemplate DataType 中使用命名空间

c# - 如何在 Xamarin 的 stackLayout 中全屏填充图像?

c# - "Items must be empty before using Items Source"更新 MapItemsControl.ItemsSource 时

c# - 无法添加对 'Microsoft Windows Installer Object Library' 的引用

c# - 错误 : PayPal: Prop is required: payment

c# - 将函数作为函数参数传递