我定义了以下窗口:
<Window x:Class="ShortCutInTabControlproblem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<TabControl>
<TabItem Header="_1st Tab">
<DataGrid ItemsSource="{Binding Persons}" />
</TabItem>
<TabItem Header="_2nd Tab">
</TabItem>
</TabControl>
</DockPanel>
后面的代码如下:
public partial class MainWindow : Window
{
public ObservableCollection<Person> Persons { get; set; }
public MainWindow()
{
InitializeComponent();
Persons = new ObservableCollection<Person>
{new Person() {Name = "John", Age = 39}, new Person() {Name = "Doe", Age = 34}};
DataContext = this;
}
}
最后是以下“模特”:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
当我尝试在第一个选项卡上添加一行到数据网格(“第一个选项卡”)并且我按下的第一个键是'2'时,会发生最奇怪的事情。这将激活第二个选项卡(“第二个选项卡”),因为它定义了一个快捷方式。
如果我编辑现有网格,例如John的年龄并按'2',然后没有任何反应(除了年龄改为2)。
这是一个已知的错误,是否有任何已知的修复程序?你知道一种方法要求按下Alt +'2',而不仅仅是'2'吗?
请帮帮我......
提前致谢 SørenRokkedal
答案 0 :(得分:0)
这实际上是一个知道问题,应该在将来的.NET版本中修复。
与此同时,您可以使用自定义TabItem来解决问题:
public class MyTabItem : TabItem
{
protected override void OnAccessKey(AccessKeyEventArgs e)
{
if ((Keyboard.Modifiers & ModifierKeys.Alt) != ModifierKeys.Alt)
{
return;
}
base.OnAccessKey(e);
}
}
您还可以编写以下修复程序来解决所有UIElements的问题:
EventManager.RegisterClassHandler(typeof(UIElement), AccessKeyManager.AccessKeyPressedEvent, new AccessKeyPressedEventHandler(OnAccessKeyPressed));
其中OnAccessKeyPressed将实现相同的逻辑。