当列表视图具有焦点时,按 Enter 键的默认行为是选择列表视图的第一个元素,向上和向下箭头键滚动列表视图。我试图阻止这种默认行为并连接我的自定义逻辑。
我可以使用 KeyDown 为列表视图实现访问键,如下所示:
代码隐藏方法:
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>
并使用行为将列表视图的滚动条滚动到选定的索引:
<corebehaviors:ListViewScrollBehaviour SelectedIndex="{x:Bind IsSelected, Mode=OneWay}"/>
当列表视图没有焦点时,会触发上述处理程序。当列表视图获得焦点时,向上、向下箭头和 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)