当 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/