一个区域内有多个网格

时间:2010-06-15 19:48:30

标签: c# wpf .net-4.0

我目前正在使用Visual Studio 2010中的C#和XAML创建一个WPF应用程序。

我有一个主网格。在该主网格中,我有一个组栏,您可以选择不同的项目。根据您选择的内容,主网格的中间可能完全不同。我想知道的是,编写中间部分的最佳方法是什么?

现在,我设置的方式是中间的所有内容都是在C#中动态编​​程的,外部的所有内容都是用XAML编程的。

在C#中我编程:对于每个组条项目,都有一个与之相关的网格(以便可以在其上显示不同的内容)。每个网格都是主网格的子网。必要时,每个网格都可见或隐藏。这是解决这个问题的最好方法吗?

最好的例子是在Outlook 2007中,您的组栏位于右侧。当您在组栏上选择不同的项目(邮件,日历,任务)时,组栏的权限将完全更改。

1 个答案:

答案 0 :(得分:1)

在WPF中执行此操作的简便方法是为每个“中间”部分定义DataTemplates。

使用Outlook示例,您可能拥有一个存储消息列表的MessageCollection类,一个存储日历事件列表的EventCollection类,以及一个存储任务列表的TaskCollection类。

在“中间”区域,您只需拥有一个ContentPresenter,其内容将设置为MessageCollection,EventCollection或TaskCollection。据推测,这可以通过绑定到视图模型属性来完成。

以下是它的外观:

<Window ...>
  <Grid>
    <!-- group bar area -->
    ...

    <!-- "middle" area -->
    <ContentPresenter Grid.Row="1" Grid.Column="1"
                      Content="{Binding SelectedCollection}" />
  </Grid>
</Window>

现在为每个集合类型创建一个DataTemplate,例如:

<DataTemplate TargetType="{x:Type my:MessageCollection}">
  <Grid>
    ... put the XAML for displaying mailbox contents here ...
  </Grid>
</DataTemplate>

<DataTemplate TargetType="{x:Type my:EventsCollection}">
  <Grid>
    ... put the XAML for displaying a calendar here ...
  </Grid>
</DataTemplate>

<DataTemplate TargetType="{x:Type my:TasksCollection}">
  <Grid>
    ... put the XAML for displaying a to-do list here ...
  </Grid>
</DataTemplate>

使用此设置,切换内部网格所需要做的就是将视图模型中的“SelectedCollection”属性设置为不同的集合类型。