C# 绑定选项卡项模板

C# 绑定选项卡项模板,c#,wpf,templates,binding,C#,Wpf,Templates,Binding,我有一个TabControl,里面有一个TabItems列表,我想使用不同的源代码模板。 假设2个TabItems将绑定到一个对象,2个TabItes可能绑定到一个observetecollection 为此,我提出以下建议: 我创建了以下资源: <DataTemplate x:Key="TemplateType1" > <StackPanel> <Grid Background="{StaticResource WindowBackgrou

我有一个TabControl,里面有一个TabItems列表,我想使用不同的源代码模板。 假设2个TabItems将绑定到一个对象,2个TabItes可能绑定到一个observetecollection

为此,我提出以下建议:

我创建了以下资源:

<DataTemplate x:Key="TemplateType1" >
    <StackPanel>
        <Grid Background="{StaticResource WindowBackgroundColor}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto"/>
                <ColumnDefinition Width="auto"/>
            </Grid.ColumnDefinitions>
            <Grid Margin="10,10,20,10">
                <Grid.RowDefinitions>
                    <RowDefinition Height="40"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                </Grid.RowDefinitions>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="*"/>

                    </Grid.RowDefinitions>
                    <RadioButton Visibility="{Binding BottomChoice, Converter={StaticResource BoolToVisConverter}}"
                    Content="True option"
                    GroupName="radioGroup1"
                    IsChecked="{Binding Bottom,
                                        Converter={StaticResource InverseBoolRadioConverter}}" />
                    <RadioButton Grid.Row="1" Visibility="{Binding BottomChoice, Converter={StaticResource BoolToVisConverter}}"
                    Content="False option"
                    GroupName="radioGroup1"
                    IsChecked="{Binding Bottom}" />
                </Grid>
                <Button Grid.Row="1" Width="200">
                    <Image Source="..\img\image_about.png"/>
                </Button>
                <Grid Grid.Row="2">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="60"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="60"/>
                    </Grid.ColumnDefinitions>
                    <Button Content="{x:Static p:Resources.Delete}" Click="DeleteMacro_Click" Margin="3" >
                        <Button.Style>
                            <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Name, Mode=OneWay}" Value="">
                                        <Setter Property="Button.IsEnabled" Value="False" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Button.Style>
                    </Button>
                    <Button Content="{x:Static p:Resources.Change}" Grid.Column="2" Click="EditMacroLeft_Click" Margin="3">
                        <Button.Style>
                            <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Name, Mode=OneWay}" Value="">
                                        <Setter Property="Button.Content" Value="{x:Static p:Resources.Add}" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Button.Style>
                    </Button>
                </Grid>

            </Grid>
            <Grid Margin="20,10,10,10" Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
            </Grid>
        </Grid>
    </StackPanel>
</DataTemplate>

然后我的标签是这样的:

<TabItem Header="{x:Static p:Resources.Type1_Right}" Style="{StaticResource VerticalTabItem}">
    <TabItem.ContentTemplate>
        <DataTemplate>
            <Grid>
                <ContentPresenter ContentSource="{Binding MacroRight}" ContentTemplate="{StaticResource TemplateType1}"/>
            </Grid>
        </DataTemplate>
    </TabItem.ContentTemplate>
</TabItem>

我正在尝试将我的模板绑定到
MacroRight
,但绑定不起作用

也可以看到有一个
DataTemplateSelector
的可能性,但我看不到关于如何使用它的具体示例?

文档说明:

仅当ContentPresenter位于模板中时,才应使用此属性。当模板包含ContentSource设置为“Abc”的ContentPresenter时,ContentPresenter的Content、ContentTemplate和ContentTemplateSelector属性将分别自动别名为Abc、ABCTTemplate和ABCTTemplateSelector

应将其设置为常量(非绑定),并让其创建内容绑定:

<ContentPresenter ContentSource="MacroRight" ...

您是否尝试绑定内容:
ContentPresenter Content=“{Binding MacroRight}”
?@Ash刚刚尝试将
ContentSource
替换为
Content
,但没有更改任何内容。精度:使数据模板对我来说是新的,所以我不确定我做它的正确方法?我看到也有ControlTemplates,所以我可以用它代替DataTemplate(因为我将有两个不同的模板),DataTemplate很好。您是否设置了TabItem.Content?您的意思是在
@ASh上有其他想法?在最坏的情况下,我将不使用模板(它们只重复两次),但也最好掌握它们,因为所有XAML人员都有点我的弱点^ ^'
<ContentPresenter Content="{Binding MacroRight}" ...