在WPF/焦点问题中通过MVVM启动用户控制

在WPF/焦点问题中通过MVVM启动用户控制,wpf,mvvm,focus,user-controls,Wpf,Mvvm,Focus,User Controls,我通过WPF中的MVVM将一些UserControl加载到tabcontrol中 在usercontrol的XAML中,我使用FocusManager将焦点设置为文本框,但是这似乎仅在创建usercontrol的第一个实例时起作用 为了进行测试,我向usercontrol添加了一个已加载的事件处理程序——这仅在第一个实例上调用 我正在为用户控件使用数据模板,如下所示: <DataTemplate DataType="{x:Type local:UserTypeViewModel}"

我通过WPF中的MVVM将一些UserControl加载到tabcontrol中

在usercontrol的XAML中,我使用FocusManager将焦点设置为文本框,但是这似乎仅在创建usercontrol的第一个实例时起作用

为了进行测试,我向usercontrol添加了一个已加载的事件处理程序——这仅在第一个实例上调用

我正在为用户控件使用数据模板,如下所示:

    <DataTemplate DataType="{x:Type local:UserTypeViewModel}">
        <local:UserTypeView />
    </DataTemplate>
    FocusManager.FocusedElement="{Binding ElementName=txtName}"
此外,我还使用了一个全局事件处理程序(用于textbox GotFocus事件),它使用dispatcher选择所有文本

如果有人对如何使用每个用户控件实现焦点有任何建议,我将非常感激


谢谢,本。

记住,只有在以下情况下,视觉元素才能获得焦点:

  • 它是可见的(在TabControl中,一次只能看到一个tabitem)
  • IsFocusable必须设置为true(UserControls的默认值为false)
  • 它已完成加载(当您编写时-在加载的事件中执行此操作))
我认为第一个原因是为什么它只适用于第一个元素

至于如何为所有控件实现它,您可以为加载的事件使用带有EventSetter的样式。但是,您需要为每种类型的控件创建样式,以避免为每个控件设置样式