更改菜单项上的内容控制模板单击?

时间:2012-10-23 13:18:14

标签: c# wpf menuitem contentcontrol

如果在WPF中单击不同的菜单项标题时,是否可以告诉我如何更改内容模板。我已经定义了用户控件,我可以把它作为模板。

例如:菜单项包括:主页,玩家,团队。当我点击Home时,我希望弹出我的Content Control中的特定模板,当我点击Players时,我想要另一个模板(播放器列表)在Content Control中弹出作为模板。

如何使用XAML中的触发器执行此操作?

非常感谢:)

2 个答案:

答案 0 :(得分:2)

您可以使用ContentControl托管您的内容,并根据您希望的内容设置方式设置ContentControl.ContentTemplate

作为一个非常基本的例子,

<ContentControl x:Name="MyContentControl">
    <ContentControl.Style>
        <Style TargetType="{x:Type ContentControl}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding }" Value="Home">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <local:MyHomeUsercontrol />
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding }" Value="Players">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <local:MyPlayersUsercontrol />
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding }" Value="Team">
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <local:MyTeamUsercontrol />
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
        </Style>
    </ContentControl.Style>
</ContentControl>

MenuItem.Click

MyContentControl.Content = "Home"; // or "Players" or "Team"

在此示例中,我使用string作为ContentControl.Content,但是如果您要使用HomeViewModelPlayersViewModel等类对象,那么您的XAML可以简化为使用隐式数据模板,这些模板是在WPF尝试绘制特定类时自动使用的模板

<Window.Resources>
    <DataTemplate DataType="{x:Type HomeViewModel}">
        <local:MyHomeUserControl />
    </DataTemplate>
    <DataTemplate DataType="{x:Type PlayersViewModel}">
        <local:MyPlayersUserControl />
    </DataTemplate>
    <DataTemplate DataType="{x:Type TeamViewmModel}">
        <local:MyTeamUserControl />
    </DataTemplate>
</Window.Resources>

<ContentControl x:Name="MyContentControl" />

MyContentControl.Content = new HomeViewModel();

答案 1 :(得分:0)

如何在顶部使用带标签位置的标签控件?那样会更干净..

编辑;例如:

  <TabControl>
        <TabItem>
            <TabItem.Header>
                <TextBlock Text="Football header!"/>
            </TabItem.Header>
            <TabItem.Content>
                <Button Content="Push for football!"/>
            </TabItem.Content>
        </TabItem>
    </TabControl>

这也可能有所帮助; http://www.switchonthecode.com/tutorials/the-wpf-tab-control-inside-and-out