DataGridColumnHeader中的第一个下划线将被删除
本文关键字:删除 下划线 第一个 DataGridColumnHeader | 更新日期: 2023-09-27 18:25:24
我遇到了一个问题,我有一个DataGridColumnHeader,它正在接收以下划线为内容的文本,除非按alt,否则第一个下划线将隐藏("data_grid_thing"显示为"datagrid_thing(.然而,这对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>
谢谢!
这是因为对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("_", "__");
}
这篇博客文章说,你可以通过将下划线加倍来转义:"data__grid_thing"
。
另一种方法可以在这个问题的公认答案
我喜欢umbreon222的解决方案。如果你和我一样,一直使用DataGrids,并且有一个你总是引用的库(就像我一样),你可以创建一个DataGrid类的子类,它一直注册该事件处理程序:
using System.Windows.Controls;
namespace MCLBZ7.Controls
{
public class MCLDataGrid : DataGrid
{
public MCLDataGrid() : base()
{
this.AutoGeneratingColumn += DG_AG_Header;
}
private void DG_AG_Header(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
string header = e.Column.Header.ToString();
e.Column.Header = header.Replace("_", "__");
}
}
}