尝试在TabControl中的Tab项中将UserControl作为选项卡内容托管时出现问题。
我的代码结构如下:
我有一个视图模型,应该通过DataTemplate渲染到View中。
<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标题确实呈现正常,但是标签中没有内容。
我很确定问题出在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>
有谁知道我在这里做错了什么?
提前感谢!
答案 0 :(得分: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映射到具有相同绑定的视图,因此您可以看到绿色椭圆。
答案 1 :(得分: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>
答案 2 :(得分:0)
解决了这个问题。由于重命名操作,BAML已损坏! :(