FocusManager.FocusedElement and MVVM

本文关键字:MVVM and FocusedElement FocusManager | 更新日期: 2023-09-27 17:54:11

我想控制哪个按钮在我的视图中集中。用户必须能够执行工作,而不需要使用鼠标。而约伯则是遍历所有元素。根据元素的不同,有些按钮会出现,有些按钮会消失。

我可以用依赖属性来做。例如,如果有上一页下一页按钮,那么我可以提供IsPreviousFocusedIsNextFocused,在某个事件发生后对它们设置焦点。事件可以是:第一次显示窗口(某些东西应该已经有焦点了),到达一个元素(隐藏上一个按钮,设置IsNextFocused),到达最后一个元素(相反),等等。

这看起来或多或少是合理的。

但是,如果我有,例如,10个按钮(不同的操作),那么他们都必须有依赖属性!

所以我在考虑更简单的方法:当我隐藏按钮时,将有没有焦点

if(FocusManager.FocusedElement == null) { ... }

如果我可以检测到,当没有焦点时,那么我可以尝试以某种方式将其设置为其中一个按钮。这样,我就不需要任何复杂的焦点管理

问题是:在MVVM场景下如何处理FocusManager.FocusedElement ?如何检测何时没有焦点(当窗口第一次显示时,当某些按钮被点击并变得不可见等)?

注:实际上,我讨厌微软在没有充分考虑的情况下开发另一种技术;focus是一个非常基本的特性(每个人都关心在他们的软件中),但是没有直接支持它(在xaml中);看起来像"哦,太复杂了,我们跳过它吧"解决方案

FocusManager.FocusedElement and MVVM

你可以使用下面的方法从ViewModel控制你的焦点:从视图模型在WPF中设置文本框焦点(c#)