【问题标题】:WPF: Prevent RowDetailTemplate from being entered using down arrow key?WPF:防止使用向下箭头键输入 RowDetailTemplate?
【发布时间】:2014-06-27 13:15:23
【问题描述】:

我有一个显示当前选定行的 RowDetailTemplate 的 DataGrid。用户可以使用向上和向下箭头键轻松滚动 DataGrid,但是当用户到达 DataGrid 中的最后一行时,会发生一些奇怪的事情:它没有将焦点保持在最后一行,而是进入 RowDetailTemplate。 我不介意在行选择中失去焦点,但问题是 RowDetailTemplate 中的第一个 UserControl 是一个 ComboBox,然后它也会通过更改其选择来对向下箭头键作出反应。我有一些客户已经抱怨他们无意中更改了 ComboBox 中的值,因为他们没有注意到焦点从行移到了 ComboBox。

到目前为止,我发现的唯一解决方案是将 IsTabStop 设置为 false,但这也意味着用户不能再使用 tab 键到达所述 ComboBox。

有人知道如何防止焦点通过箭头键进入 RowDetailTemplate 吗?

【问题讨论】:

    标签: wpf focus


    【解决方案1】:

    如果你们能互相阅读对方的问题,那就太好了,因为我今天早些时候刚刚回答了一个与这个问题几乎相同的问题。请查看我对WPF C# How to disbale Focus changes by Arrow Keys 问题的回答以获取更多信息。但是,您的问题完全不同,足以阻止我将其作为副本关闭。

    但原理保持不变...您需要在 PreviewKeyDown 事件处理程序中将 e.Handled 属性设置为 true 以停止正常行为(来自链接问题):

    private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Left || e.Key == Key.Right)
        {
            // Move your camera here
            e.Handled = true;
        }
    }
    

    唯一的区别是在取消正常行为之前,您需要检查是否已到达最后一项。

    【讨论】:

    • 感谢您的回答!我发誓我确实先搜索了答案,但在 StackOverflow 中输入时我没有看到您提到的线程。
    • 没问题...这些事情都会发生。
    猜你喜欢
    • 2011-09-07
    • 2011-03-13
    • 2014-08-03
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2012-05-24
    • 2020-02-20
    • 1970-01-01
    相关资源
    最近更新 更多