在WPF /焦点问题中通过MVVM启动UserControl

时间:2010-06-12 11:34:45

标签: wpf mvvm focus user-controls

我在WPF中通过MVVM将一些用户控件加载到tabcontrol中。

在用户控件的XAML中,我使用FocusManager将焦点设置到文本框,但是这似乎仅在创建第一个usercontrol实例时有效。

为了测试,我向usercontrol添加了一个加载的事件处理程序 - 这只在第一个实例上调用。

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

    <DataTemplate DataType="{x:Type local:UserTypeViewModel}">
        <local:UserTypeView />
    </DataTemplate>

文本框的重点如下:

    FocusManager.FocusedElement="{Binding ElementName=txtName}"

此外,我正在使用全局事件处理程序(对于文本框GotFocus事件),它使用调度程序选择所有文本。

如果有人知道如何通过每个用户控制实现焦点,我将非常感激。

谢谢,Ben。

1 个答案:

答案 0 :(得分:3)

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

  • 它是可见的(在TabControl中,一次只能看到一个tabitem
  • IsFocusable必须设置为true(对于UserControls默认为false)
  • 已完成加载(当您编写时 - 在Loaded事件中执行))

我认为第一个原因是它只适用于第一个元素。

至于如何为所有控件实现它 - 您可以使用带有EventSetter的样式来处理Loaded事件。您需要为每种控件创建一个样式,以避免必须为每个控件设置它。