2010-03-24 73 views
0

我有一個綁定到視圖模型WPF TabBarControl將焦點設置到元素時,標籤更改

  <TabControl 
      ItemsSource="{Binding Path=ViewModelCollection}" > 
      <TabControl.ItemContainerStyle> 
       <Style 
        TargetType="TabItem" 
        BasedOn="{StaticResource {x:Type TabItem}}"> 
        <Setter 
         Property="Header" 
         Value="{Binding Title}" /> 
        <Setter 
         Property="Content" 
         Value="{Binding}" /> 
       </Style> 
      </TabControl.ItemContainerStyle> 
      </TabControl> 

每個選項卡只包含一個視圖模型項目一個TabControl。我使用數據模板來顯示這個。

<!-- View Model Template --> 
    <DataTemplate 
    DataType="{x:Type local:ViewModelItem}"> 
    <DockPanel> 
     <TextBox Text="I want this to have the focus"/> 
    </DockPanel> 
    </DataTemplate> 

在當前選項卡發生改變,我想重點要對文本框(這是一個簡單的例子,在我的生產代碼,我有一個DataGrid)的數據模板。我怎麼做到這一點?

+0

在代碼或XAML中設置焦點? – Timores 2010-03-24 23:39:13

+0

在xaml中執行它會很好,選項卡的數量是動態的。在代碼中設置它將意味着拖曳尋找文本框的可視化樹。如何在數據模板上設置初始聚焦元素以及如何在選項卡欄上設置焦點的一般解決方案會很好。但我不介意使用代碼。即使從標籤欄派生,所以我沒有把它放在後面的代碼。 – 2010-03-25 00:05:46

回答

0

當你在DataTemplate中定義模板時,我不完全確定你可以把焦點放在UIElement上。您可以將DataTemplate的內容放置在UserControl中,而不是直接使用DataTemplate,然後將程序集中在TextBox上。

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:ViewModelItem}"> 
    <ContentControl Content="{Binding Path=YourProperty}" /> 
    </DataTemplate> 
</Window.Resources> 


<TabControl ItemsSource="{Binding Path=ViewModelCollection}"> 
    <TabControl.ItemContainerStyle> 
    <Style 
     TargetType="TabItem"> 
     <Setter 
      Property="Header" 
      Value="{Binding Path=Title}" /> 
    </Style> 
    </TabControl.ItemContainerStyle> 
</TabControl> 

並在代碼的用戶控件的背後:

public MyUserControl() 
{ 
    InitializeComponent(); 
    this.Loaded += new RoutedEventHandler(OnLoaded); 
} 

void OnLoaded(object sender, RoutedEventArgs e) 
{ 
    MyTextBox.Focus(); 
} 

我工作了一個小項目,通過推動的DataTemplate到用戶控件,文本框獲得了當標籤被改變重點。