我曾经有一个带有附加属性的窗口来跟踪焦点控件:
FocusManager.FocusedElement="{Binding CurrentlySelectedTextBox, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
CurrentlySelectedTextBox是窗口的视图模型中的一个属性。
现在我的窗口有框架了。框架的内容是一页。我使用其自己的viewmodel将原始窗口的内容移至页面。我将附加的属性从窗口移到了页面。从那时起,从不设置CurrentSelectedTextBox属性。
漫长的搜索无济于事。页面不受FocusManager.FocusedElement影响吗?
更新:如果附件属性位于窗口中,则即使焦点位于页面控件上,也会设置FocusManager.FocusedElement。
答案 0 :(得分:1)
wpf中有一个focusscope概念,它可能会引起类似这样的问题。
基本问题是您的页面与窗口的聚焦范围不同。
Focusscope允许wpf为tabcontrol和menu之类的控件维护逻辑而不是物理的焦点概念。
为了保持哪个具有逻辑焦点,默认情况下,focusmanager将与每个focusscope中具有焦点的元素有关。
该行为在某种程度上是可配置的,但是在更改此行为之前,您需要非常小心,因为存在副作用。