Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将UserControl作为选项卡内容托管_C#_Wpf_Mvvm_Datatemplate - Fatal编程技术网

C# 将UserControl作为选项卡内容托管

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作为TabControl中的选项卡项内的选项卡内容宿主时出现问题

我的代码结构如下:

<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将视图模型映射到视图。