gpt4 book ai didi

wpf - 设置默认键盘焦点加载用户控件

转载 作者:行者123 更新时间:2023-12-04 02:46:31 28 4
gpt4 key购买 nike

我有一个包含 ContentControl 的主窗口的 MVVM 设置。
我将它设置为一个特定的 View 模型,然后映射到一个 View 。
View 是一个用户控件。
我希望能够在加载时将默认键盘焦点设置为用户控件( View )中的默认元素,以便最终可以通过使用向上、向下、向左、向右和输入来驱动应用程序。
我的一些失败尝试正在设置

FocusManager.FocusedElement="{Binding ElementName=DefaultElement}"

在我的内容控制标签中。这会设置逻辑焦点,但不会设置键盘焦点

如果可能的话,我宁愿将解决方案保留在 xaml 中,但已尝试将以下代码放在后面。
Keyboard.Focus(DefaultElement);  

这不起作用,但如果我首先弹出一个消息框,它会起作用。我有点困惑为什么。
MessageBox.Show(Keyboard.FocusedElement.ToString());
Keyboard.Focus(DefaultElement);

编辑::::
我只是把它放在我的用户控件的加载事件中。它似乎有效,但任何人都可以看到在此优先级上可能出现的任何问题。即行动永远不会运行的情况?
Dispatcher.BeginInvoke(
DispatcherPriority.ContextIdle,
new Action(delegate()
{
Keyboard.Focus(DefaultElement);
}));

最佳答案

似乎这个 wpf 您必须根据具体情况实现解决方法。对我来说,大多数情况下似乎效果最好的解决方案是在 OnVisible 更改时在调度程序中插入焦点代码。这不仅会在 View /用户控件加载时设置焦点,还会在您通过可见性更改 View 时设置焦点。如果您隐藏然后显示映射到您的 ViewModel 的 ContentControl,则不会触发 Loaded 事件,您将被迫使用鼠标输入或制表符(如果您想使用 Remote 导航应用程序,则不太好) .
但是,VisibilityChanged 将始终触发。这就是我最终为我的列表框所做的。

private void ItemsFlowListBox_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue == true)
{
Dispatcher.BeginInvoke(
DispatcherPriority.ContextIdle,
new Action(delegate()
{
ItemsFlowListBox.Focus();
ItemsFlowListBox.ScrollIntoView(ItemsFlowListBox.SelectedItem);
}));
}
}

关于wpf - 设置默认键盘焦点加载用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9535784/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com