0

我曾经有一个带有附加属性的窗口来跟踪焦点控件:

FocusManager.FocusedElement="{Binding CurrentlySelectedTextBox, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

CurrentSelectedTextBox 是窗口视图模型中的一个属性。

现在我的窗户有一个框架。框架的内容是一个页面。我将原始窗口的内容移动到具有自己视图模型的页面。我将附加属性从窗口移动到页面。从那时起,从未设置 CurrentSelectedTextBox 属性。

漫长的几天搜索一无所获。页面对 FocusManager.FocusedElement 免疫吗?

更新:如果附加属性在窗口上,即使焦点位于页面控件上,也会设置 FocusManager.FocusedElement。

4

1 回答 1

1

wpf 中有一个 focusscope 的概念,它可能会导致这样的问题。

基本问题是您的页面是与窗口不同的焦点范围。

Focusscope 允许 wpf 为诸如 tabcontrol 和 menu 之类的控件维护一个逻辑而不是物理的焦点概念。

为了维护具有逻辑焦点的焦点管理器将默认关注每个焦点范围内具有焦点的元素。

该行为在某种程度上是可配置的,但在更改它之前需要非常小心,因为存在副作用。

于 2019-10-31T12:34:23.597 回答