如何根据对象类型更改项目和内容模板?

时间:2009-06-22 20:51:03

标签: wpf .net-3.5 styles

我有一个WPF TabControl我已设置ItemTemplate以及ContentTemplate。此选项卡控件根据客户技术支持信息显示呼叫日志信息。

在同一控件内部,我还希望能够显示ReturnAuthorization模板。

我想根据添加到TabControl的Items集合中的对象类型来交换它们。这是可能的吗?

我有一些伪代码,它们显示了我想要实现的目标:

<TabControl x:Name="tabCases" IsSynchronizedWithCurrentItem="True" ItemContainerStyle="{StaticResource ClosableTabItemTemplate}"  >
        <TabControl.ItemTemplate>
            if ( Type is Entities:Case )
            {
            <DataTemplate DataType="{x:Type Entities:Case}">
                    <TextBlock Text="{Binding Path=Id}" />
            </DataTemplate>
            }
            else if ( Type is Entities1:RAMaster )
            {
            <DataTemplate DataType="{x:Type Entities1:RAMaster}">
                <TextBlock Text="{Binding Path=Id}" />
                </DataTemplate>
            }
        </TabControl.ItemTemplate>
        <TabControl.ContentTemplate>
            <DataTemplate DataType="{x:Type Entities:Case}">
                <CallLog:CaseReadOnlyDisplay DataContext="{Binding}" />
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>

1 个答案:

答案 0 :(得分:-1)

执行此操作的一种方法是使用类似ItemTemplateSelector的内容,您可以在TabControl上设置它。但是,如果您只需要TabControl中的不同模板并提前了解它们的内容,那么您可以使用DataTypes让它们automatically应用。

<TabControl x:Name="tabCases" IsSynchronizedWithCurrentItem="True" ItemContainerStyle="{StaticResource ClosableTabItemTemplate}"  >
    <TabControl.Resources>

        <DataTemplate DataType="{x:Type Entities:Case}">
                <TextBlock Text="{Binding Path=Id}" />
        </DataTemplate>

        <DataTemplate DataType="{x:Type Entities1:RAMaster}">
            <TextBlock Text="{Binding Path=Id}" />
        </DataTemplate>

    </TabControl.Resources>
    <TabControl.ContentTemplate>
        <DataTemplate DataType="{x:Type Entities:Case}">
            <CallLog:CaseReadOnlyDisplay DataContext="{Binding}" />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>