ViewModel的焦点控制

时间:2010-11-02 11:22:59

标签: c# wpf mvvm tabcontrol

当我没有悬停在按钮或任何东西上时,为什么第一个按钮“处于活动状态”。这似乎发生在我更改标签后。

alt text

我怀疑当我更改标签时,它会聚焦第一个控件。是这样的吗?我正在开发一个MVVM应用程序,所以从我的视图模型来看,我该如何关注文本框呢?

2 个答案:

答案 0 :(得分:2)

由于WPF的焦点概念有点复杂,我有一个名为FocusEnforcer的类。

无论如何,它确实能确保所需的控制成为焦点。

public static class FocusEnforcer
{
    public static void EnforceFocus(UIElement element)
    {
        if (!element.Focus())
        {

            element.Dispatcher.BeginInvoke(DispatcherPriority.Input, 
                                            new ThreadStart(delegate()
                                                            {
                                                                element.Focus();
                                                            }));

        }

    }
}

答案 1 :(得分:0)

这种行为只需要:行为。或者,至少是一个新的附属财产。

  1. 为选项卡控件创建附加属性。
  2. 为此附加属性的更改创建处理程序。
  3. 在此处理程序中,订阅TabControl的SelectionChanged事件。
  4. 在SelectionChanged事件处理程序中,使用TabControl.FindName方法获取文本框。
  5. 使用TabControl作为焦点范围执行FocusManager.SetFocusedElement方法。