2010-11-16 71 views
0

我在嘗試將TabControl中的UserControl作爲Tab內容託管在TabControl中時出現問題。將用戶控件作爲標籤內容承載

我的代碼結構如下:

我有這應該被渲染成通過一個DataTemplate視圖視圖模型。

<DataTemplate x:Key="TabItemContentTemplate" DataType="{x:Type ViewModels:MyViewModel}"> 
    <Views:MyView /> 
</DataTemplate> 

我想在 一個TabControl提出這種觀點(實際上是一個 XamTabControl,但無論哪種方式, 問題仍然存在。)

<UserControl> 
     <UserControl.Resources> 
     <DataTemplate x:Key="TabItemHeaderTemplate"> 
       <StackPanel> 
        <TextBlock Text="{Binding Path=Name}" /> 
        <TextBlock Text="{Binding Path=Description}"/>    
       </StackPanel> 
     </DataTemplate> 
      <DataTemplate x:Key="TabItemContentTemplate" DataType="{x:Type ViewModels:MyViewModel}"> 
       <Views:MyView /> 
      </DataTemplate> 
     <Style x:Key="TabItemContainerStyle" TargetType="Controls:TabItemEx"> 
      <Setter Property="Header" Value="{Binding}"/> 
      <Setter Property="HeaderTemplate" 
        Value="{DynamicResource TabItemHeaderTemplate}"/> 
      <Setter Property="Content" Value="{Binding}"/> 
      <Setter Property="ContentTemplate" 
        Value="{DynamicResource TabItemContentTemplate}"/> 
     </Style>     
     </UserControl.Resources> 
     <Grid > 
     <Controls:XamTabControl 
     ItemsSource="{Binding Items}" 
     ItemContainerStyle="{DynamicResource TabItemContainerStyle}" 
     TabStripPlacement="Left" 
     TabLayoutStyle="SingleRowAutoSize" 
     AllowTabClosing="True"        
     Grid.Row="1" 
     TabItemCloseButtonVisibility="WhenSelectedOrHotTracked"> 
     </Controls:XamTabControl> 
     </Grid> 
    </UserControl> 

的問題是,內容不渲染。 Tab標頭確實呈現良好,但是,標籤中沒有內容。

我相當肯定的問題在於視圖/視圖模型映射中,當我改變模板下面的,我把內容輸出:

<DataTemplate x:Key="TabItemHeaderTemplate"> 
    <Grid> 
    <TextBlock Text="{Binding Header}"/> 
    <Ellipse Fill="Red" Width="40" Height="40" Margin="0,20,0,0"/> 
    </Grid> 
</DataTemplate> 
<DataTemplate x:Key="TabItemContentTemplate"> 
    <Ellipse Fill="Green"/> 
</DataTemplate> 
<Style x:Key="TabItemContainerStyle" TargetType="Controls:TabItemEx"> 
    <Setter Property="Header" Value="{Binding}"/> 
    <Setter Property="HeaderTemplate" 
      Value="{StaticResource TabItemHeaderTemplate}"/> 
    <Setter Property="Content" Value="{Binding}"/> 
    <Setter Property="ContentTemplate" 
      Value="{StaticResource TabItemContentTemplate}"/> 
</Style> 

有沒有人有一個想法是什麼,我做錯了這裏?

在此先感謝!

+0

有很多的工作來重現你的場景與給定的代碼 - 也許你可以減少這個問題? – 2010-11-16 22:40:24

回答

0

解決了這個問題。由於重命名操作,BAML被破壞! :(

0

我設法使之與MyView.xaml工作方式如下:

<UserControl x:Class="WpfApplication27.MyView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      > 
    <StackPanel> 
     <TextBox Text="{Binding Path=Name}"></TextBox> 
     <TextBox Text="{Binding Path=Description}"></TextBox> 
    </StackPanel> 
</UserControl> 

alt text

+0

你已經設法使什麼工作?問題是渲染一個用戶控件到一個tabcontrol內容窗格中MVVM方式。 – miguel 2010-11-16 23:04:06

+0

不好意思,但是不一樣。我使用DataTemplate將視圖模型映射到視圖。 – miguel 2010-11-17 07:48:23

2

如果我理解你正確的,那麼我認爲這個問題是您嘗試從綁定的屬性VM到視圖

<Setter Property="Header" Value="{Binding}"/>      
    <Setter Property="HeaderTemplate" Value="{StaticResource TabItemHeaderTemplate}"/> 
    <DataTemplate x:Key="TabItemHeaderTemplate">      
      <StackPanel>      
       <TextBlock Text="{Binding Path=Name}" />      
       <TextBlock Text="{Binding Path=Description}"/>          
      </StackPanel>      
    </DataTemplate> 

,並同時你用同樣的結合嘗試使用視圖「替換」的VM

 <Setter Property="Content" Value="{Binding}"/>        
     <Setter Property="ContentTemplate" Value="{StaticResource TabItemContentTemplate}"/> 
     <DataTemplate x:Key="TabItemContentTemplate" DataType="{x:Type ViewModels:MyViewModel}">        
      <Views:MyView />        
     </DataTemplate> 

在你的第二個例子中,你沒有將vm映射到具有相同綁定的視圖,所以你看到了綠色的橢圓。