C#WPF-在网格之间切换

时间:2019-02-09 14:53:38

标签: c# wpf

对于WPF,我几乎不熟悉C#。我有一个小问题。也许解决方案很简单,但是我现在看不到它。所以我想做不同的表。我使用网格制作自己的表。现在,我想在应用程序处于不同状态的表之间切换,以便使网格不可见,而使我需要的网格可见。如何在XAML中实现几个网格表?例如,我有一个tabcontrol,在tabitem中,我想放置多个网格,但是那是不可能的。例如,我尝试使用StackPanel,但是在网格底部有一个缺口。我需要一种定义几个网格并在它们之间切换的方法。在使用C#之前,我使用过MATLAB,只是将每个表放在PANEL中,并在需要时将它们切换为可见和不可见。 WPF中没有类似的方法吗?

问候

2 个答案:

答案 0 :(得分:0)

在wpf中有模板和数据模板。您可以定义模板,并使用数据类型和类型将其关联。

然后,当wpf遇到X类型的实例时,会将其模板化为您与X关联的任何数据模板。通常用于首先称为viewmodel的模式(使用google it进行导航)。

此模式通常与MVVM开发一起使用。如果打算进行任何“严肃的” wpf开发,则应该考虑这是另一种模式。几乎每个人都使用它(如果您不使用它,每次有人问有关wpf的问题时,都会有人告诉您使用mvvm。)

您可以使用这种方法。

大致:

在要切换用户界面的位置添加contentcontrol。 为每个定义一个数据模板。 将视图模型中的属性绑定到该contentcontrol的内容。 将其切换为更改UI。 每个不同的选项都有一个视图模型和关联的模板。 一个简单的例子,所以您有一些具体的东西: https://social.technet.microsoft.com/wiki/contents/articles/52485.wpf-tips-do-not-use-frame-and-page-for-navigation.aspx

另一种选择是制表符控件。 您可以将视图模型的集合绑定到tabcontrol的itemssource,并类似地将它们模板化为视图。 当然,这具有内置的功能来选择他们想要的选项。

答案 1 :(得分:-1)

在这种情况下,我会使用UserControls。每种网格类型都有一个用户控件。一个示例(与所讨论的网格无关)如下所示。

<Window.Resources>
        <ResourceDictionary>
            <DataTemplate x:Key="DTGlobalAdminManager">
                <AC:UCGlobalAdmin DataContext="{Binding Source={x:Static GVM:VMAdminConsole.Instance}, Path=ViewModelGlobalAdmin}"/>
            </DataTemplate>
            <DataTemplate x:Key="DTCompanyAdminProjects">
                <AC:UCCompanyAdmin DataContext="{Binding Source={x:Static GVM:VMAdminConsole.Instance}, Path=ViewModelCompanyAdmin}" />
            </DataTemplate>
            <DataTemplate x:Key="DTProjectAdminManager">
                <AC:UCProjectAdminManage DataContext="{Binding Source={x:Static GVM:VMAdminConsole.Instance}, Path=ViewModelProjectAdmin}"/>
            </DataTemplate>
            <DataTemplate x:Key="DTGlobalAdminAssignCategories">
                <AC:UCGlobalAdminCategories DataContext="{Binding Source={x:Static GVM:VMAdminConsole.Instance}, Path=ViewModelGlobalAdmin}"/>
            </DataTemplate>
        </ResourceDictionary>
    </Window.Resources>

您可以设置内容控件和不同的用户控件(每个用户控件包含不同的网格模板)。然后使用样式触发器进行切换。