【发布时间】:2010-01-31 12:35:24
【问题描述】:
我为这个糟糕的标题道歉,我不知道如何解释它。
我有一个类似this 的界面(抱歉,我是新手,无法直接发布图片)。
我希望根据左侧的树选择来显示右侧的显示控件。在 WPF 项目中执行此操作的最简单方法是什么?有没有更好的方法来解决这个问题?
谢谢!
【问题讨论】:
我为这个糟糕的标题道歉,我不知道如何解释它。
我有一个类似this 的界面(抱歉,我是新手,无法直接发布图片)。
我希望根据左侧的树选择来显示右侧的显示控件。在 WPF 项目中执行此操作的最简单方法是什么?有没有更好的方法来解决这个问题?
谢谢!
【问题讨论】:
理想情况下,您将使用 MVVM 设计模式来执行此操作,但如果您正在寻找一种简单易用的方法来使其工作,您可以尝试这个...创建 UserControls 成为不同的子表单,然后抛出他们成一个框架。您也可以使用网格,但框架允许您在需要时使用导航(前进、后退)。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="5"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Right"/>
<!--TreeView Code Here-->
<TreeView x:Name="treeView" SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeViewItem Header="Devices" IsExpanded="True">
<TreeViewItem Header="Device 1" Tag="UserControl1.xaml"/>
<TreeViewItem Header="Device 2" Tag="UserControl2.xaml"/>
<TreeViewItem Header="Device 3" Tag="UserControl3.xaml"/>
</TreeViewItem>
<TreeViewItem Header="Users" IsExpanded="True">
<TreeViewItem Header="Add" Tag="UserControl4.xaml"/>
<TreeViewItem Header="Edit/Delete" Tag="UserControl5.xaml"/>
</TreeViewItem>
</TreeView>
<!--Frame to hold your subform (UserControl)-->
<Frame x:Name="SubForm" Grid.Column="2" NavigationUIVisibility="Hidden"/>
</Grid>
代码隐藏:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeViewItem item = (TreeViewItem)treeView.SelectedItem;
SubForm.Source = new Uri(item.Tag.ToString(), UriKind.RelativeOrAbsolute);
}
【讨论】:
您应该使用 MDI 表单。在其中添加您的树视图控制器。在树视图事件处理程序中,您可以根据所选项目显示子表单。确保将子表单的“MdiParent”属性设置为 MDI 表单。
【讨论】: