C# 更改网格行的内容

C# 更改网格行的内容,c#,wpf,xaml,C#,Wpf,Xaml,我很抱歉,如果这个问题很容易回答,但我是新的WPF 我有一个2行的网格。第一行将包含菜单,第二行将其内容设置为响应菜单项“单击” 为了简单起见,让我们假设我有2个菜单项和2个用户控件 以下是示例场景: 在程序开始时,仅显示菜单,第二个网格行为空 用户选择第一个菜单项->第二个网格行现在应该包含第一个用户控件 现在用户选择第二个菜单项,所以第二行应该包含第二个用户控件(同时删除以前的内容) 问题: 实现这一目标的正确方法是什么 到目前为止,我尝试了什么: 我已将ContentControl放置在第

我很抱歉,如果这个问题很容易回答,但我是新的WPF

我有一个2行的网格。第一行将包含菜单,第二行将其内容设置为响应菜单项“单击”

为了简单起见,让我们假设我有2个菜单项和2个用户控件

以下是示例场景:

在程序开始时,仅显示菜单,第二个网格行为空

用户选择第一个菜单项->第二个网格行现在应该包含第一个用户控件

现在用户选择第二个菜单项,所以第二行应该包含第二个用户控件(同时删除以前的内容)

问题: 实现这一目标的正确方法是什么

到目前为止,我尝试了什么: 我已将ContentControl放置在第二个网格行中,并在菜单项click上更改其内容(下面是小代码示例)

XAML:


你可以用一个
框架
我想这也可以做这项工作,他用一个框架来切换内容,而你只是在第一页不放任何内容。希望它能帮助你

你可以使用一个
框架
我想这也可以做这项工作。这是一个视频,他用一个框架来切换内容,而你只是在第一页不放任何内容。希望它能帮助您

我认为解决您的问题的最佳方法是使用InteractionTriggers,下面是一个示例

首先,如果您决定这样做,您需要将以下引用添加到您的项目中:

System.Windows.Interactivity

Microsoft.Expression.Interactions

要做到这一点,是时候在XAML中声明它们以使用它了:

    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions"
现在,如果这样说的话,您可以做所有您想做的事情,而无需在代码背后写一行代码,如果您遵循MVVM模式,这是非常好的,下面是您的菜单项:

<MenuItem Header="First user control">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Click">
                    <ie:ChangePropertyAction TargetName="windowContent" PropertyName="Visibility" Value="Hidden"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
</MenuItem>

基本上,您可以“分配”单击事件,并在触发事件时执行一些操作,在本例中,我们将执行一个名为ChangePropertyAction的操作,该操作将把控件“windowContent”(需要定义控件名称)的PropertyName=“Visibility”更改为值“Hidden”


您只需根据您的情况调整此示例,您必须在XAML上声明两个UsersControl以更改其属性。

我认为解决问题的最佳方法是使用InteractionTriggers,下面是一个示例

首先,如果您决定这样做,您需要将以下引用添加到您的项目中:

System.Windows.Interactivity

Microsoft.Expression.Interactions

要做到这一点,是时候在XAML中声明它们以使用它了:

    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions"
现在,如果这样说的话,您可以做所有您想做的事情,而无需在代码背后写一行代码,如果您遵循MVVM模式,这是非常好的,下面是您的菜单项:

<MenuItem Header="First user control">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Click">
                    <ie:ChangePropertyAction TargetName="windowContent" PropertyName="Visibility" Value="Hidden"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
</MenuItem>

基本上,您可以“分配”单击事件,并在触发事件时执行一些操作,在本例中,我们将执行一个名为ChangePropertyAction的操作,该操作将把控件“windowContent”(需要定义控件名称)的PropertyName=“Visibility”更改为值“Hidden”


您只需根据自己的情况调整此示例,就必须在XAML上声明两个UsersControl以更改其属性。

如果您选择使用代码隐藏,并且最容易理解和修改,则您的方法完全可以。@NirajDoshi:谢谢。我只是觉得很难相信没有像
Grid.Row[0]=something
这样的东西能让我的任务变得更简单…欢迎从Winforms来到Wpf的世界(我想)。当您可以编辑内容时,它为您提供了更大的灵活性。因为如果您以后计划向网格添加/删除行,则需要手动重构网格的行索引。这只是一个优势。根据具体情况还有很多。如果您选择使用代码隐藏,并且最容易理解和修改,那么您的方法完全可以。@NirajDoshi:谢谢。我只是觉得很难相信没有像
Grid.Row[0]=something
这样的东西能让我的任务变得更简单…欢迎从Winforms来到Wpf的世界(我想)。当您可以编辑内容时,它为您提供了更大的灵活性。因为如果您以后计划向网格添加/删除行,则需要手动重构网格的行索引。这只是一个优势。根据具体情况还有很多。