gpt4 book ai didi

wpf - AvalonDock 现在失去了 Alt Key 装饰

转载 作者:行者123 更新时间:2023-12-01 03:53:14 24 4
gpt4 key购买 nike

我已经使用 AvalonDock (2.0) 有一段时间了,它是在 IDE 中管理文档的关键。在上个月左右,我注意到 Alt 键装饰不再显示 AvalonDock 中的控件,尽管 Alt 键命令按预期执行。请参阅下图,其中 Alt 键装饰显示在菜单中,但不显示 AvalonDock 中的按钮:

No Alt Keys

这个问题特别有趣的是,它似乎是由环境设置或条件触发的。

如本 video 所示(在 2:07),alt 键装饰用于 AvalonDock 中的控件。但是,如果我现在使用与该视频中使用的相同的可执行文件,则 alt 键装饰不起作用。

我目前使用的是 build 2.0.1746,但我也尝试了 build 2.0.2000(使用 Xceed 命名空间)并发现了同样的问题。我也试过 Xceed Extended WPF Toolkit 打包的版本,发现问题依旧。

我还构建了一个非常简单的测试应用程序,它加载了几个类型为 Item 的文档。 ,其中 Item是一个带有 Name 的简单类属性(property):

<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 键装饰也会出现在 Test 上。 AvalonDock 之外的按钮,但不适用于 ClickMe AvalonDock 中控件的按钮。

我也贴了问题 here在 AvalonDock codeplex 站点上,但响应事件似乎很少。我也贴了问题 here在 Extended Toolkit 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 });
}
}

通过将以下内容添加到您的 DataTemplate 的根元素中,从 XAML 使用它用于 AvalonDock LayoutItemTemplate :
<i:Interaction.Behaviors
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<my:FixKeyboardCuesBehavior />
</i:Interaction.Behaviors>

此解决方法使用 WPF 的内部实现细节在损坏的 AvalonDock 逻辑树下重新引入 Alt 行为。所以,当 AD 本身被修复时,我将期待能够从我的代码中删除它!

关于wpf - AvalonDock 现在失去了 Alt Key 装饰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20036898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com