WPF:禁用选项卡控件上的箭头键

2024-03-18

我在应用程序中使用 WPF TabControl 以便在程序的不同区域/功能之间切换。

不过有一件事让我很恼火。我隐藏了选项卡,这样我就可以控制选定的选项卡,而不是用户。然而,用户仍然可以使用箭头键在选项卡之间切换。

我尝试过使用 KeyboardNavigation 属性,但无法正常工作。

可以禁用此功能吗?


您可以为此之一挂钩 TabControl.PreviewKeyDown 事件。检查一下是左箭头还是右箭头,然后说你已经处理好了。

    private void TabControl_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Left || e.Key == Key.Right)
            e.Handled = true;
    }

如果您使用的是纯视图模型应用程序,您可以将上述内容应用为附加属性。

XAMl 使用以下附加属性。

<TabControl local:TabControlAttached.IsLeftRightDisabled="True">
    <TabItem Header="test"/>
    <TabItem Header="test"/>
</TabControl>

TabControlAttached.cs

public class TabControlAttached : DependencyObject
{
    public static bool GetIsLeftRightDisabled(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsLeftRightDisabledProperty);
    }

    public static void SetIsLeftRightDisabled(DependencyObject obj, bool value)
    {
        obj.SetValue(IsLeftRightDisabledProperty, value);
    }

    // Using a DependencyProperty as the backing store for IsLeftRightDisabled.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty IsLeftRightDisabledProperty =
        DependencyProperty.RegisterAttached("IsLeftRightDisabled", typeof(bool), typeof(MainWindow), new UIPropertyMetadata(false, new PropertyChangedCallback((s, e) =>
        {
            // get a reference to the tab control.
            TabControl targetTabControl = s as TabControl;
            if (targetTabControl != null)
            {
                if ((bool)e.NewValue)
                {
                    // Need some events from it.
                    targetTabControl.PreviewKeyDown += new KeyEventHandler(targetTabControl_PreviewKeyDown);
                    targetTabControl.Unloaded += new RoutedEventHandler(targetTabControl_Unloaded);
                }
                else if ((bool)e.OldValue)
                {
                    targetTabControl.PreviewKeyDown -= new KeyEventHandler(targetTabControl_PreviewKeyDown);
                    targetTabControl.Unloaded -= new RoutedEventHandler(targetTabControl_Unloaded);
                }
            }
        })));

    static void targetTabControl_Unloaded(object sender, RoutedEventArgs e)
    {

        TabControl targetTabControl = sender as TabControl;
        targetTabControl.PreviewKeyDown -= new KeyEventHandler(targetTabControl_PreviewKeyDown);
        targetTabControl.Unloaded -= new RoutedEventHandler(targetTabControl_Unloaded);
    }

    static void targetTabControl_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Left || e.Key == Key.Right)
            e.Handled = true;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF:禁用选项卡控件上的箭头键 的相关文章

随机推荐

  • 对服装照片进行分类有哪些好的功能? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想构建一个服装分类器 拍摄一件衣服的照片并将其分类为 牛仔裤 连衣裙 运动鞋 等 一些例子 这些图像来自零售商网站 因此通常是从相同
  • 将 XML 数据集数据表合并为一个数据表

    我需要使用 C 解析 XML 文档以将数据存入数据库 目前 我正在使用 SSIS 和此 C 代码将文档读入数据集 var xmlString File ReadAllText Variables filepath var stringRea
  • Android 本地化问题:切换区域设置时布局中的所有项目均无法正确更新

    问题是 当我在后台运行一个活动 切换区域设置 然后切换回应用程序时 所有内容都会更新 除了设置了 android id 属性的复选框和单选按钮 如果复选框和单选按钮没有 android id 属性 那么它们会更新正常 其他字段不存在此问题
  • Random.Next 始终返回相同的值[重复]

    这个问题在这里已经有答案了 这真的很奇怪 我不明白为什么会发生这种情况 在 foreach 循环中 我迭代 A 类集合 对于每个类 我调用Count 方法 其中r1 and r2数字是从范围 1 1 生成的 问题是Random Next为每
  • 如何在Linux上停止时间倒流?

    这是我编写的一个小测试 用于验证时间确实只在 Linux 中向前运行 include
  • 将变量从 Jupyter Notebook 传递到 Python 脚本

    我想在 Jupyter 笔记本中定义一个变量 然后将其传递给 python 脚本 例如 在笔记本中 a 1 2 3 4 run example py print foo 在 example py 中 b 5 8 9 10 foo a b 当
  • JavaFX:如何清除画布

    假设我在画布上画了一个矩形 我想清理它以绘制其他图形 多边形 弧 我该怎么做 我尝试过很多方法 但没有一个有效 我认为这可能有效 但我不确定 GraphicsContext gc myCanvas getGraphicsContext2D
  • Scala 解决了 Comparator.thenComparing 中的错误覆盖问题

    我正在尝试翻译以下 Java 代码 import java util Comparator public class ComparatorTestJava public static void test Comparator
  • Visual Studio 2015 Update 2 导致 IDE 挂起

    安装 Visual Studio 2015 Update 2 后 IDE 挂起并且不会在启动屏幕上启动 唯一的修复方法是运行 devenv setup 或者进行修复看起来像是未更新缓存的已知问题 但这是针对预发布更新的 我检查了我的日志 得
  • SwiftUI onAppear 中的异步数据获取

    我有课getDataFromDatabase有功能readData 这就是从 Firebase 读取数据 class getDataFromDatabase ObservableObject var arrayWithQuantity In
  • 删除条形图之间的空间ggplot2

    这是我的代码 ggplot df aes x timepoint y mean fill group geom bar position position dodge 3 colour black stat identity width 0
  • ValueTuple.Create 中的命名参数

    我正在研究 C 中的值元组 首先是一些演示数据 region Data public class Product public string Name get set public int CategoryID get set public
  • 从 Word 中的内容控件提取数据到 Excel

    我有一个 可填写表单 的 Word 文档 即其中包含内容控制对象 例如富文本和日期选择器内容控件 我希望将特定字段的数据提取到 Excel 中 例如 每个表单都有项目标题 开始日期和经理 我想要该表格的 1 行包含这三项数据 最终 每隔几个
  • 如何使用 python 解析 json 对象?

    我正在尝试解析 json 对象并遇到问题 import json record shirt red quanitity 100 blue quantity 10 pants black quantity 50 inventory json
  • 为什么 JavaScript 展开表示法在这里不起作用

    我正在学习 React 有一个我无法解决的简单问题 我创建了一个代码沙盒 https codesandbox io s react dropzone sha256 5ngg7 file src FileUpload js 在图像中 file
  • 在 ArrayController 模型的过滤子集上设置 itemController

    问题摘要 虽然我可以让集合的子级 在 ArrayController 上定义 为个体使用特定的对象控制器 但这不适用于已过滤的子级子集 简短的上下文 我有订阅 其中有项目 我想按类型过滤视图中的订阅 并让这些订阅中的项目按时间戳排序 这是订
  • 在 R 中按组引导结果向量

    Question 如何使用引导程序来获取一组数据的置信区间 根据协方差矩阵的特征值计算的统计数据 分别为 数据框中的每个组 因子水平 Problem 数据不太清楚 结构我需要包含这些适合的结果boot函数 或者一种在组上 映射 引导程序并以
  • 如何验证 DataGridView 输入?

    我有一些严重的问题数据网格视图输入验证 我正在使用实体框架开发一个项目 并且我已经绑定了数据网格视图元素到数据库 如果用户将一些数据插入到不可为空的列中 然后清除数据以使该列留空 然后单击另一个数据网格视图单元格时 发生异常并且出现运行时错
  • 使用 Python/Pandas 对非系统/排列数据进行平均和绘制

    我有一个非系统 整理的数据如下 x y 0 049098 82854 2105263158 0 049058 82472 2368421053 0 066427 84358 3421052632 0 066465 83842 9210526
  • WPF:禁用选项卡控件上的箭头键

    我在应用程序中使用 WPF TabControl 以便在程序的不同区域 功能之间切换 不过有一件事让我很恼火 我隐藏了选项卡 这样我就可以控制选定的选项卡 而不是用户 然而 用户仍然可以使用箭头键在选项卡之间切换 我尝试过使用 Keyboa