Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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# 更改菜单项上的内容控件模板单击?_C#_Wpf_Menuitem_Contentcontrol - Fatal编程技术网

C# 更改菜单项上的内容控件模板单击?

C# 更改菜单项上的内容控件模板单击?,c#,wpf,menuitem,contentcontrol,C#,Wpf,Menuitem,Contentcontrol,您能告诉我,当在WPF中单击不同的菜单项标题时,如何更改内容模板吗。我已经定义了用户控件,可以将其作为模板 例如:菜单项包括:主场、球员、球队。当我点击主页时,我希望内容控件中的特定模板弹出,当我点击播放器时,我希望另一个模板(播放器列表)作为模板弹出内容控件 如何在XAML中使用触发器实现这一点 非常感谢:)使用选项卡位于顶部的选项卡控件如何?那样会干净得多 编辑;例如: <TabControl> <TabItem> <

您能告诉我,当在WPF中单击不同的菜单项标题时,如何更改内容模板吗。我已经定义了用户控件,可以将其作为模板

例如:菜单项包括:主场、球员、球队。当我点击主页时,我希望内容控件中的特定模板弹出,当我点击播放器时,我希望另一个模板(播放器列表)作为模板弹出内容控件

如何在XAML中使用触发器实现这一点


非常感谢:)

使用选项卡位于顶部的选项卡控件如何?那样会干净得多

编辑;例如:

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


这可能也有帮助

您可以使用
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>
在本例中,我将
字符串
用于
ContentControl.Content
,但是如果要使用类对象,例如
HomeViewModel
PlayerViewModel
,可以简化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" />

那么,在tab项中我定义了模板?正确,在您的tab项中,您将为标题放置内容,如果需要,您还可以使用TabHeaderTemplate设置标题样式。
<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();