如何在WPF中关闭Alt键快捷键

如何在WPF中关闭Alt键快捷键,wpf,.net-3.5,Wpf,.net 3.5,[.NET3.5]我有一个名为PickList的WPF用户控件 Picklist有一个网格,其中有一个名为TouchGrid的UserControl,以及一个名为BoundFieldProperty的DependencyProperty,它是一个字符串 TouchGrid有一个名为Columns的ObservableCollection属性 TouchGridColumn是一个UIElement 最后,我有一些XAML,它定义了一个名为imageList的选取列表。它将BoundField定义为

[.NET3.5]我有一个名为PickList的WPF用户控件

Picklist有一个网格,其中有一个名为TouchGrid的UserControl,以及一个名为BoundFieldProperty的DependencyProperty,它是一个字符串

TouchGrid有一个名为Columns的ObservableCollection属性

TouchGridColumn是一个UIElement

最后,我有一些XAML,它定义了一个名为imageList的选取列表。它将BoundField定义为“Name”

我不知道这是否足以解决问题;我不会要求你费力地浏览所有这些用户定义的控件

我使用它的方式是将imageList的数据源分配给具有“Name”属性的对象列表,这样我的PickList就变成了字符串列表。问题是,如果字符串中有一个或多个下划线,则第一个下划线被视为alt键快捷键,因此除非我按alt键,否则它将从显示中“消失”。[请注意,这是一款触摸屏应用程序!]


我猜这一定是UIElement级别的某种默认设置,尽管我没有发现任何东西;有人能猜到我在哪里可以解决这个问题吗?

您可以为包含将绑定到name属性的TextBlock的项创建一个DataTemplate。TextBlock控件不尊重Alt键快捷键标识,应该以存储文本的方式显示文本。

Microsoft MVP表示此功能在WPF中不是可选的。首选的解决方案是将下划线加倍。我在列表中的类型中添加了一个只读DisplayName属性,并将该属性设置为BoundField,它已被命名。DisplayName“get”如下所示:

return new Regex( "_" ).Replace( Name, "__" );
但是,我并不总是能够更改底层对象,因此在另一个地方,我通过如下设置数据源获得了相同的结果:

imageList.DataSource = WorkOrderImages.Select( w => new
{
    w,
    DisplayName = ( new Regex( "_" ).Replace( w.Name, "__" ) )
} );

人们确实想知道,为什么要向最终用户显示带有下划线的字符串。下划线字符在我所见过的任何自然语言中都不是字形。作为程序员,我们有时会忘记这一点。数据是用户定义的,它是什么;程序员只需要处理它。