Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自ViewModel的焦点控制_C#_Wpf_Mvvm_Tabcontrol - Fatal编程技术网

C# 来自ViewModel的焦点控制

C# 来自ViewModel的焦点控制,c#,wpf,mvvm,tabcontrol,C#,Wpf,Mvvm,Tabcontrol,为什么当我没有悬停在按钮或任何东西上时,第一个按钮是“活动”的。这似乎发生在我更改选项卡之后 我怀疑当我更改选项卡时,它会聚焦第一个控件。是这样吗?我正在开发一个MVVM应用程序,所以从我的视图模型来看,我应该如何聚焦文本框呢?由于WPFs的聚焦概念有点复杂,我有一个名为FocusEnforcer的类 无论发生什么情况,它都能确保所需的控件获得焦点 public static class FocusEnforcer { public static void EnforceFocus(U

为什么当我没有悬停在按钮或任何东西上时,第一个按钮是“活动”的。这似乎发生在我更改选项卡之后


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

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

无论发生什么情况,它都能确保所需的控件获得焦点

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

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

        }

    }
}

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

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