如果在WPF中单击不同的菜单项标题时,是否可以告诉我如何更改内容模板。我已经定义了用户控件,我可以把它作为模板。
例如:菜单项包括:主页,玩家,团队。当我点击Home时,我希望弹出我的Content Control中的特定模板,当我点击Players时,我想要另一个模板(播放器列表)在Content Control中弹出作为模板。
如何使用XAML中的触发器执行此操作?
非常感谢:)
答案 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
,但是如果您要使用HomeViewModel
或PlayersViewModel
等类对象,那么您的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