我通常在Loaded事件处理程序中调用myControl.Focus(),但对于绑定到自定义对象列表的ListBox,这似乎不起作用。当我启动我的应用程序时,ListBox的第一个项目被选中,但焦点却在别处。
我认为这可能是因为在数据绑定项加载到ListBox之前设置了焦点...但以下代码显示确实存在项目,因为ctrlItemsCount显示数字8。
在这种情况下,我该如何设置初始焦点,通常设置初始焦点的正确位置是什么?
我认为这可能是因为在数据绑定项加载到ListBox之前设置了焦点...但以下代码显示确实存在项目,因为ctrlItemsCount显示数字8。
在这种情况下,我该如何设置初始焦点,通常设置初始焦点的正确位置是什么?
private void onLoad(object sender, RoutedEventArgs e) {
if (ctrlCountries.Items.Count > 0) {
ctrlItemsCount.Text = ctrlCountries.Items.Count;
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
}
}
编辑:我已将此代码移动到实际ListBox
的加载事件中。它几乎可以工作-焦点现在在ListBox
上,但是我仍然需要按键盘DOWN一次才能使第0项具有键盘光标。换句话说,焦点或光标因某种原因在第0项上方1个刻度:
private void onCountriesLoaded(object sender, RoutedEventArgs e) {
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
Keyboard.Focus();
}