【发布时间】:2013-02-23 21:04:58
【问题描述】:
我找不到在 WPF ListView 中以编程方式设置焦点项目的方法。我只能找到 Selected Item | 的变体项目 |索引 |值,但 'Focused' 项目与 'selected' 项目没有直接关系 - 可以不选择焦点项目(例如,当使用 Ctrl+Click 取消选择当前项目时)。
简而言之 - 我想从下面提供的代码中获得以下行为(它用 8 个虚拟项目填充虚拟列表视图,并在按下 X 时尝试从末尾开始关注第二个项目):
想要的行为:
- 使用鼠标 - 选择第二项
- 按 X - 这将聚焦从最后的第二个项目
- 按键盘上的“向下”数组 - 这应该会将当前选择移动到最后一项
实际发生了什么:
- 使用鼠标 - 选择第二项
- 按 X - 这会选择从末尾开始的第二个项目,但焦点仍然在从开始的第二个项目上
- 按键盘上的“向下”数组 - 这应该将当前选择移动到最后一项,但改为选择第 3 项。
注意:普通的 Win32 API(当然,它与 WPF 完全不同)对此有 LVM_SETSELECTIONMARK 消息。我在 WPF 中找不到类似的东西。存在吗?
示例 XAML:
<Window x:Class="WpfListviewTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<ListView x:Name="List1" KeyDown="List1_KeyDown">
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="Column 1" />
<GridViewColumn Width="140" Header="Column 2" />
<GridViewColumn Width="140" Header="Column 3" />
</GridView>
</ListView.View>
<sys:DateTime>1/2/3</sys:DateTime>
<sys:DateTime>4/5/6</sys:DateTime>
<sys:DateTime>7/8/9</sys:DateTime>
<sys:DateTime>10/11/12</sys:DateTime>
<sys:DateTime>1/2/3</sys:DateTime>
<sys:DateTime>4/5/6</sys:DateTime>
<sys:DateTime>7/8/9</sys:DateTime>
<sys:DateTime>10/11/12</sys:DateTime>
</ListView>
</Window>
示例代码隐藏:
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void List1_KeyDown(object sender, KeyEventArgs e) {
if( e.Key == Key.X ) {
List1.SelectionMode = SelectionMode.Single;
List1.SelectedIndex = List1.Items.Count - 2;
}
}
}
【问题讨论】:
标签: wpf wpf-controls