AvalonDockは今Altキー装飾品を失います
-
21-12-2019 - |
質問
今度はしばらくの間AvalonDock(2.0)を使用しています.IDEで文書を管理するためのキーである。最後の月などで、 alt キーコマンドが予想通りに実行されていますが、 alt キー装飾がavalonDock内のコントロールに表示されなくなったことに気付いた。以下の画像を参照してください。 alt キー装飾がメニューに表示されているが、AvalonDockの内側のボタンでは表示されていません:
この問題について特に興味深いものは、環境設定や状態によって引き起こされているように見えます。
このビデオ(2:07) Altキーの装飾はAvalonDock内のコントロールで働いています。しかし、私がそのビデオで使用したすべての実行可能ファイルを使うならば、Altキーの装飾は機能しません。
現在Build 2.0.1746を使用していますが、ビルド2.0.2000(Xceed Namespaceを使用)しようとし、同じ問題を見つけました。また、 Xceed Extended WPF Toolkit でパッケージ化されたバージョンを試してみました。
私はまた、Item
の種類の文書をいくつかロードする非常に単純なテストアプリケーションを構築します。ここで、Item
がName
プロパティを持つ単純なクラスです。
<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 DataTemplate
のLayoutItemTemplate
のルート要素に次のものを追加することで、これを使用します。
<i:Interaction.Behaviors
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<my:FixKeyboardCuesBehavior />
</i:Interaction.Behaviors>
.
この回避策は、WPFの内部実装の詳細を使用して、壊れたAVALONDOCK論理ツリーの下に ALT の展開を再紹介します。だから、広告自体が修正されたときに私のコードからZapをZapできるようにすることを楽しみにしています!