PRI*_*UFF 6 data-binding wpf listbox focus
我通常调用myControl.Focus()Loaded事件处理程序,但这似乎不适用于数据ListBox绑定到自定义对象列表.当我启动我的应用程序时,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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我已将此代码移动到实际ListBox本身的加载事件.它几乎可以工作 - 现在重点是ListBox,但是我仍然需要在项目#0具有键盘光标之前按下键盘一次.换句话说,由于某种原因,焦点或光标在项目#0上方1个档位:
private void onCountriesLoaded(object sender, RoutedEventArgs e) {
ctrlCountries.SelectedIndex = 0;
FocusManager.SetFocusedElement(this, ctrlCountries);
Keyboard.Focus();
}
Run Code Online (Sandbox Code Playgroud)
oll*_*SFT 10
如果要将第一个元素聚焦在列表框中,则必须将焦点设置为第一个ListBoxItem容器.例如:
if (myListBox.Items.Count > 0)
{
ListBoxItem item = (ListBoxItem)myListBox.ItemContainerGenerator.ContainerFromIndex(0);
FocusManager.SetFocusedElement(this /* focus scope region */, item);
}
Run Code Online (Sandbox Code Playgroud)
但是,您仍然必须确保ListBox控件首次收到其Loaded事件.还有许多其他事件可用于处理与列表框项相关的更新.看一下MSDN 中的ItemContainerGenerator.
| 归档时间: |
|
| 查看次数: |
7856 次 |
| 最近记录: |