質問

今度はしばらくの間AvalonDock(2.0)を使用しています.IDEで文書を管理するためのキーである。最後の月などで、 alt キーコマンドが予想通りに実行されていますが、 alt キー装飾がavalonDock内のコントロールに表示されなくなったことに気付いた。以下の画像を参照してください。 alt キー装飾がメニューに表示されているが、AvalonDockの内側のボタンでは表示されていません:

Altキー

この問題について特に興味深いものは、環境設定や状態によって引き起こされているように見えます。

このビデオ(2:07) Altキーの装飾はAvalonDock内のコントロールで働いています。しかし、私がそのビデオで使用したすべての実行可能ファイルを使うならば、Altキーの装飾は機能しません。

現在Build 2.0.1746を使用していますが、ビルド2.0.2000(Xceed Namespaceを使用)しようとし、同じ問題を見つけました。また、 Xceed Extended WPF Toolkit でパッケージ化されたバージョンを試してみました。

私はまた、Itemの種類の文書をいくつかロードする非常に単純なテストアプリケーションを構築します。ここで、ItemNameプロパティを持つ単純なクラスです。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:avalonDock="clr-namespace:Xceed.Wpf.AvalonDock;assembly=Xceed.Wpf.AvalonDock"
        xmlns:avalonDockLayout="clr-namespace:Xceed.Wpf.AvalonDock.Layout;assembly=Xceed.Wpf.AvalonDock"
        xmlns:avalonDockControls="clr-namespace:Xceed.Wpf.AvalonDock.Controls;assembly=Xceed.Wpf.AvalonDock"
        Title="MainWindow" Height="500" Width="500">
    <Window.Resources>
        <ResourceDictionary>
            <DataTemplate DataType="{x:Type local:Item}">
                <StackPanel Orientation="Vertical">
                    <Label Content="Item:" />
                    <TextBox Text="{Binding Name}"/>
                    <Button Content="_ClickMe" />
                </StackPanel>
            </DataTemplate>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
          <RowDefinition Height="*"></RowDefinition>
          <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <avalonDock:DockingManager Grid.Row="0"  DocumentsSource="{Binding}">
            <avalonDockLayout:LayoutRoot>
                <avalonDockLayout:LayoutPanel Orientation="Horizontal">
                    <avalonDockLayout:LayoutDocumentPane/>
                </avalonDockLayout:LayoutPanel>
            </avalonDockLayout:LayoutRoot>
        </avalonDock:DockingManager>
        <Button Grid.Row="1" Content="_Test" />
    </Grid>
</Window>
.

この単純なアプリケーションでも、 alt キー装飾は、AvalonDockの外側のTestボタンに表示されますが、AvalonDock内のコントロールのためのClickMeボタンでは表示されません。

私はまた、AvalonDock CodePlexサイトで問題をここに掲載しましたが、あるようです。応答活動はほとんどありません。また、ここで

この問題を修正する方法や回避方法についてのアイデアは?

役に立ちましたか?

解決

これは次のバージョンのAvalonDockで修正されるように聞こえます。

その間に、次のブレンド動作は回避策です。

public class FixKeyboardCuesBehavior : Behavior<UIElement>
{
    private static readonly DependencyProperty ShowKeyboardCuesProperty;

    static FixKeyboardCuesBehavior()
    {
        Type keyboardNavigation = typeof(KeyboardNavigation);
        var field = keyboardNavigation.GetField("ShowKeyboardCuesProperty", BindingFlags.NonPublic | BindingFlags.Static);

        Debug.Assert(field != null, "field != null");

        ShowKeyboardCuesProperty = (DependencyProperty)field.GetValue(null);
    }

    protected override void OnAttached()
    {
        base.OnAttached();

        Window rootWindow = Window.GetWindow(this.AssociatedObject);
        if (rootWindow == null)
        {
            return;
        }

        BindingOperations.SetBinding(
            this.AssociatedObject,
            ShowKeyboardCuesProperty,
            new Binding("(KeyboardNavigation.ShowKeyboardCues)") { Source = rootWindow });
    }
}
.

AvalonDock DataTemplateLayoutItemTemplateのルート要素に次のものを追加することで、これを使用します。

<i:Interaction.Behaviors
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
    <my:FixKeyboardCuesBehavior />
</i:Interaction.Behaviors>
.

この回避策は、WPFの内部実装の詳細を使用して、壊れたAVALONDOCK論理ツリーの下に ALT の展開を再紹介します。だから、広告自体が修正されたときに私のコードからZapをZapできるようにすることを楽しみにしています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top