0

Can you please tell me how to change content template when, in WPF, when it is clicked on different Menu Item headers. I've defined user control that I can put it as a template.

For example: Menu Items are: Home, Players, Team . when i click on Home I want that specific template in my Content Control to pop up, tehen when I click on Players I want another template (list of players) to pop in Content Control as template.

How to do that with triggers in XAML?

Thank you very much :)

4

2 に答える 2

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などのクラス オブジェクトを使用する場合は、XAML を単純化して暗黙的なデータ テンプレートを使用することができます。これは、WPF が特定のオブジェクトを描画しようとするたびに自動的に使用されるテンプレートです。クラスHomeViewModelPlayersViewModel

<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();
于 2012-10-23T15:01:16.310 に答える
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

于 2012-10-23T14:10:17.553 に答える