FocusManager.FocusedElement不会在页面上绑定

时间:2019-10-25 13:56:43

标签: wpf xaml binding window focusmanager

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

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

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

现在我的窗口有框架了。框架的内容是一页。我使用其自己的viewmodel将原始窗口的内容移至页面。我将附加的属性从窗口移到了页面。从那时起,从不设置CurrentSelectedTextBox属性。

漫长的搜索无济于事。页面不受FocusManager.FocusedElement影响吗?

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

1 个答案:

答案 0 :(得分:1)

wpf中有一个focusscope概念,它可能会引起类似这样的问题。

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

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

为了保持哪个具有逻辑焦点,默认情况下,focusmanager将与每个focusscope中具有焦点的元素有关。

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