AvalonDock 现在失去 Alt 键装饰

2023-12-06

I've been using AvalonDock (2.0) for some time now, being key for managing documents in an IDE. In the last month or so, I've noticed that Alt key adornments are no longer showing up for controls within AvalonDock, though the Alt key commands are executing as expected. See the image below where the Alt key adornments are showing up in the menu, but not for the buttons inside AvalonDock:

No Alt Keys

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

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

我目前使用的是 build 2.0.1746,但我也尝试了 build 2.0.2000(使用 Xceed 命名空间)并发现了同样的问题。我也尝试了附带的版本Xceed 扩展 WPF 工具包,发现问题依然存在。

我还构建了一个非常简单的测试应用程序,它加载几个类型的文档Item, where 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>

Even with this simple application, the Alt key adornments show up for the Test button outside of AvalonDock, but not for the ClickMe buttons for the controls within AvalonDock.

我也发布了这个问题here在 AvalonDock codeplex 站点上,但响应活动似乎很少。我也发布了这个问题here在扩展工具包 codeplex 网站上。

关于如何纠正或解决此问题有什么想法吗?


听起来好像这个问题将在下一版本的 AvalonDock 中得到解决。

同时,以下 Blend 行为是一种解决方法:

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

通过将以下内容添加到 XAML 的根元素中来使用它DataTemplate对于阿瓦隆码头LayoutItemTemplate:

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

This workaround uses internal implementation details of WPF to re-introduce the Alt behaviour below the broken AvalonDock logical tree. So, I'll be looking forward to being able to zap it from my code when AD itself is fixed!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AvalonDock 现在失去 Alt 键装饰 的相关文章

随机推荐

  • 在 Junit-4.11 中找不到类

    我在 Mac 上配置了 Junit 4 11 编译为javac没有错误 但是当我运行时java I got Could not find class HelloWorldTest 这是我的HelloWorld java and HelloW
  • 如果从外部 svg-sprite 文件使用,则 svg 中的遮罩标记将被忽略

    我正在尝试在我的项目中使用 svg sprite 并且效果很好 除非您使用的是mask精灵中的标签 公共 精灵 svg
  • 如何在 Visual C++ 下编译 WinCrypt.h?

    我有一个沼泽标准的 Visual Studio Express Visual C 环境 安装在沼泽标准的 Windows 7 机器上 我想简单地编译 include WinCrypt h 来自 Windows SDK 而不会出现错误 有人可
  • JS通过变量调用对象属性

    当我有一个对象并且我想引用其中的属性时 我可以使用例如 objectName propertyName 当我有一个 子属性 时我可以使用 objectName propertyName propertyName 但是如何使用这种语法的变量呢
  • 将操作按钮添加到一个片段的操作栏

    我的应用程序有三个选项卡 我使用寻呼机在选项卡之间切换 每个选项卡都有自己的片段 我使用 OptionsMenu 方法将 设置 和 帮助 操作按钮添加到主活动的操作栏中 我现在想向操作栏添加一个新的操作按钮 但仅适用于第一个选项卡和第一个片
  • asp.net core 3.0 - 如何增加空闲超时

    这是使用 asp net core 3 0 的网站 我用CookieAuthentication并设置cookie过期时间如下 services AddAuthentication CookieAuthenticationDefaults
  • Selenium 中是否可以通过部分 id 匹配来定位元素

    我正在尝试使用生成的 id 来查找元素 其中 ID 的某些部分是已知的 例如 id page x002e x0023 default create firstname 其中最后 3 个单词 default create firstname
  • Jqgrid 以 inlineNav 样式添加新的空白行

    我想创建Add Edit Save And Delete我的 JqGrid 下方的按钮
  • 使用Angularjs的$http时读取响应头

    我在用 http进行 api 调用 发送一些自定义标头 例如X Foo 但是我还不知道如何阅读它们 在 的里面 http success function data status headers config 功能 headers是一个应该
  • 使用 Zxing 的 Android 条码扫描器

    我想将Zxing集成到android项目中 我是初学者 我已经看到这里描述的方式http bit ly nBszrL不鼓励 最好的方法是通过意图 如这篇文章所述http bit ly o29Uma PS 我不想要扫码机安装在我的设备上 我已
  • Ruby 中的三重单引号与三重双引号

    为什么你可能会使用 代替 as in 艰难地学习 Ruby 第 10 章学习练习 Ruby 中没有三引号 Two String并置的文字被解析为单个文字String文字 所以 Hello World gt HelloWorld 是相同的 H
  • R 中的轴标签:p(Y=y | theta = some)

    我已经搜索遍了 但找不到具有条件符号的代码 如 p a b 我使用的代码 通用 R 代码 而不是 ggplot 是 ylab bquote Pr Y y theta mytheta n n 这给了我一个标签 Pr Y y 0 2 n 10
  • 安装Anaconda后无法安装Python模块

    新注意 我无法通过 binstar 或 anaconda 安装 为什么我不能在 anaconda 之外的 python 中安装 当我不通过连续启动器专门 lunch 时 有没有办法让我的计算机停止使用 python 的 anaconda 安
  • SQL:ORDER BY 两列混合,不基于优先级

    我正在使用 mySQL 我必须按姓氏对联系人姓名进行排序 但如果没有姓氏 我会按名字排序 这看起来像 ORDER BY lastname lastname firstname 然而 这使得带有姓氏的出现在顶部 我想要的行为是将名字和姓氏混合
  • 示例函数中的替换是什么意思? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 当我尝试从数据框中随机选择每组中的 10 个样本时 我试图弄清楚样本函数的工作原理 我有一个 5 列和 7000 行的数据框 我将数据集分成大约 200 个组 然后我想从每组
  • 在 UIButton 的选择器上传递参数

    我有一个detailDisclousurea 的标注上的按钮MKAnnotation 当按下此按钮时 我需要调用一个传递标识参数的方法annotation那叫它 怎么可能呢 这是我的注释视图 MKAnnotationView mapView
  • 如何使用 Git 恢复

    How is git revert used 这可能听起来像是一个重复的问题 但当人们问这个问题时 答案通常是 使用git reset as per 恢复到 Git 中 SHA 哈希的提交 然后当有人问如何使用时git reset人们回复说
  • 车把和异步调用

    我使用这个助手来检查图像是否存在 Handlebars registerHelper checkLogo function url UrlExists url function status if status 200 return new
  • Delphi w Indy 10:无法通过 Web 服务器上的 SSL“最佳实践”通过 TLS 1.2 连接

    问题 我们如何让 Indy 10 与强制执行最新 TLS 1 2 SSL 最佳实践的 Web 服务器配合使用 Microsoft 记录了最佳实践 https technet microsoft com library security ms
  • AvalonDock 现在失去 Alt 键装饰

    I ve been using AvalonDock 2 0 for some time now being key for managing documents in an IDE In the last month or so I ve