C# 将UserControl作为选项卡内容托管
尝试将UserControl作为TabControl中的选项卡项内的选项卡内容宿主时出现问题 我的代码结构如下:C# 将UserControl作为选项卡内容托管,c#,wpf,mvvm,datatemplate,C#,Wpf,Mvvm,Datatemplate,尝试将UserControl作为TabControl中的选项卡项内的选项卡内容宿主时出现问题 我的代码结构如下: <UserControl x:Class="WpfApplication27.MyView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xa
<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>
我有一个视图模型,它应该通过DataTemplate渲染成一个视图
<DataTemplate x:Key="TabItemContentTemplate" DataType="{x:Type ViewModels:MyViewModel}">
<Views:MyView />
</DataTemplate>
我想以书面形式提出这一观点
选项卡控件(实际上是
XamTabControl,但无论如何
问题仍然存在。)
问题是内容无法呈现。选项卡标题呈现良好,但是选项卡中没有内容
我相当确定问题存在于视图/视图模型映射中,因为当我将模板更改为以下内容时,确实会呈现内容:
<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>
有人知道我做错了什么吗
提前谢谢 我已经成功地使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>
如果我理解您的意思是正确的,那么我认为问题在于您试图将属性从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映射到具有相同绑定的视图,因此您会看到绿色椭圆。解决了这个问题。由于重新命名操作,BAML已损坏!:(要用给定的代码重现您的场景,需要做大量的工作-也许您可以减少问题?您已经设法做到了什么工作?问题是以MVVM方式将usercontrol呈现到tabcontrol内容窗格中。很抱歉,这不一样。我正在使用DataTemplate将视图模型映射到视图。