0

次の Window を定義しています。

<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; }
}

最初のタブ (「1st Tab」) のデータグリッドに行を追加しようとすると、最も奇妙なことが起こり、最初に押すキーは「2」です。これにより、ショートカットが定義されているため、2 番目のタブ (「2nd タブ」) がアクティブになります。

John の年齢など、既存のグリッドを編集して '2' を押しても、何も起こりません (年齢が 2 に変更される以外は)。

これは既知のバグですか? 既知の修正はありますか? 「2」だけでなく、Alt+「2」を押す必要がある方法を知っていますか?

私を助けてください...

よろしくお願いします SørenRokkedal

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 に答える