在datagrid中编辑新行会激活没有ALT的快捷方式

时间:2012-10-05 12:27:09

标签: wpf datagrid shortcut alt

我定义了以下窗口:

<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

1 个答案:

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