【发布时间】:2010-11-16 21:49:31
【问题描述】:
我在尝试将用户控件作为选项卡内容托管在 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 header 渲染得很好,但是标签中没有内容。
我相当确定问题出在 View/Viewmodel 映射中,因为当我将模板更改为以下内容时,我确实得到了呈现的内容:
<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>
有人知道我在这里做错了什么吗?
提前致谢!
【问题讨论】:
-
用给定的代码重现你的场景需要做大量的工作——也许你可以减少问题?
标签: c# wpf mvvm datatemplate