2010-06-12 29 views
1

我有几个用户控件通过WPF中的MVVM加载到tabcontrol中。在WPF /焦点问题中通过MVVM启动UserControl

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

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

我使用用户控制数据模板如下:

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

文本框的重点如下:

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

另外我使用的是一个全球性的事件处理程序(用于文本框GotFocus事件),它使用调度程序选择所有文本。

如果任何人有任何提示如何实现每个用户控件的焦点,我会非常感激。

谢谢,本。

回答

2

请记住,一个视觉元素只能接收焦点,如果:

  • 它是可见的(在一个TabControl只有一个TabItem的可以同时可见
  • IsFocusable必须设置为true(是默认假的用户控件)
  • 它已经完成加载(如你写的 - 做它在Loaded事件))

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

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