c# - 防止 XAML/C# 中 ListView 的 Return(Enter)、向上和向下箭头键的默认行为 (Windows 10)

标签 c# visual-studio xaml windows-10 uwp

当 ListView 具有焦点时,按回车键的默认行为是选择 ListView 的第一个元素,向上和向下箭头键滚动 ListView 。我试图阻止这种默认行为并连接我的自定义逻辑。

我能够使用 KeyDown 为 ListView 实现访问键,如下所示:

代码隐藏方法:

CoreWindow.GetForCurrentThread().KeyDown += KeyDownHandler;

MVVM 方法:

<ListView SelectedIndex="{Binding IsSelected, Mode=TwoWay}"/>

触发 Keydown 属性:

<core:EventTriggerBehavior EventName="KeyDown">
        <core:InvokeCommandAction Command="{x:Bind VMDataContext.KeyDownCommand}" />
    </core:EventTriggerBehavior>

并使用行为将 ListView 的滚动条滚动到所选索引:

<corebehaviors:ListViewScrollBehaviour SelectedIndex="{x:Bind IsSelected, Mode=OneWay}"/>

上述处理程序在 ListView 没有焦点时被触发。当 ListView 具有焦点时,将触发向上箭头、向下箭头和 Enter 键的默认行为,而不是我的附加行为。有没有办法阻止默认行为?

最佳答案

考虑扩展 ListView 控件并覆盖 OnKeyDown 处理程序。

public class ExtendedListView : ListView
{
    protected override void OnKeyDown(KeyRoutedEventArgs e)
    {
        if (e.Key == VirtualKey.Enter || e.Key == VirtualKey.Up || e.Key == VirtualKey.Down)
        {
            return;
        }

        base.OnKeyDown(e);
    }
}

关于c# - 防止 XAML/C# 中 ListView 的 Return(Enter)、向上和向下箭头键的默认行为 (Windows 10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32558920/

相关文章:

c# - 简单的 WPF 平移;这段代码很接近但不太正确

c# - 如何在ControlTemplate中绑定(bind)ComboBox的ItemsSource?

c# - 随机双数的多次迭代往往会变小

vb.net - mysql 最新的密码哈希算法/数据加密是什么?

c# - 防止特定行在 Designer.cs 中自动更改代码

visual-studio - Double 常量是否被截断以在 VS 中显示?

c++ - 异常内核库.dll

wpf - ToggleButton 悬停和单击行为

c# - "An unsecured or incorrectly secured fault was received from the other party"

c# - 是否有低级网络库来嗅探和更改网络流量?