0

我定义了以下窗口:

<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øren Rokkedal

4

1 回答 1

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 将实现相同的逻辑。

于 2012-10-05T14:15:33.903 回答