需要帮助来准备具有垂直菜单的WPF应用程序的主页

问题描述

| 嗨, 我正在创建WPF应用程序。我的主页看起来像我在图片中显示的主页。 我将在其中包含以下组件: 1.顶栏 2.左栏-像手风琴一样向下滑动的菜单,如果有任何子菜单项,则在选择时将向下滑动,否则在选择时将显示相关形式。 3.主面板-我将在其中打开我的子表格 4.底栏。 如果我已经实现了可以在我的应用程序中重用的应用程序,我会更喜欢,因为我认为这种形式会花费很多时间。另外,由于我是WPF的新手,所以我很乐意就以下几点提供一些指导 如何在WPF中制作像菜单一样的手风琴,它也应该包含子菜单。例如报告菜单-其中将包含所有报告的列表,当您单击报告菜单时将显示该列表。我如何在WPF中完成此操作> 如何在右侧面板中打开子窗体?我应该在表单中使用哪些控件/组件来托管子表单? 任何样例应用程序,Web参考或已实现的代码都将提供很大的帮助,因为我的截止日期非常严格,而且没有时间花很多时间进行探索。     

解决方法

        放弃全部手风琴功能 如果您没有完整的手风琴就可以生活,则可以通过使用alternate0ѭ和其他布局(
TabStripPlacement=\"Left\"
)轻松完成与您想要的类似的操作。 看到这个问题(与我的评论相同):创建带有WPF部分的选项卡式边栏 现有图书馆 现有的WPF控制库带有手风琴: WPF工具包 Telerik Rad控件-http://www.telerik.com/products/wpf.aspx(或silverlight / asp.net MVC等) 许多其他人,大多数是为了钱... 自己动手做 您也可以尝试使用
TreeView
来实现您的手风琴。您只需要袖手旁观即可完成此操作: 首先,您需要隐藏树视图按钮。他们会弄乱我们正在努力实现的目标。看到这个问题-Treeview隐藏[+] [-]按钮 其次,如果选择了
TreeViewItem
或其子元素之一,则要确保将
IsExpanded
属性设置为true,否则将其设置为false。您可以将
IMultiValueConverter
Style
组合成
TreeViewItem
<Window x:Class=\"WpfApplication1.MainWindow\"
  xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
  xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"
  xmlns:local=\"clr-namespace:WpfApplication1\">

<!-- ... -->

<TreeView>
  <TreeView.Resources>
    <local:SelectedItemToIsChildConverter x:Key=\"isChildConverter\" />
    <Style TargetType=\"{x:Type TreeViewItem}\">
      <Style.Setters>
        <Setter Property=\"IsExpanded\">
          <Setter.Value>
            <MultiBinding Converter=\"{StaticResource isChildConverter}\">
              <Binding Path=\"SelectedItem\"
                RelativeSource=\"{RelativeSource AncestorType={x:Type TreeView}}\" />
              <Binding RelativeSource=\"{RelativeSource Self}\" />
            </MultiBinding>
          </Setter.Value>
        </Setter>
      </Style.Setters>
    </Style>
  </TreeView.Resources>
  <!-- Children here,or set ItemsSource property via databinding -->
</TreeView>
这是转换器的代码,位于单独的CS文件中:
public class SelectedItemToIsChildConverter : IMultiValueConverter
{
    public object Convert(object[] values,Type targetType,object parameter,System.Globalization.CultureInfo culture)
    {
        TreeViewItem selectedItem = values.Length > 0 ? values[0] as TreeViewItem : null;
        TreeViewItem targetItem = values.Length > 1 ? values[1] as TreeViewItem : null;

        if (targetItem == null)
            return false;

        TreeViewItem currentItem = selectedItem;
        while (currentItem != null)
        {
            if (currentItem == targetItem)
                return true;
            currentItem = currentItem.Parent as TreeViewItem;
        }

        return false;
    }

    public object[] ConvertBack(object value,Type[] targetTypes,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
之后,您必须对其进行样式设置以使其看起来不错,并支持动画。 完成所有这些操作后,使用网格来拆分您的UI。使用数据绑定根据选定的树视图项在主UI区域上显示内容。 编辑: 实际上,树视图对于手风琴来说是一个糟糕的基础。我搜索了一些有关手风琴控件的详细信息,结果发现它们往往只有一个层次结构。 考虑到此说明,使用
DataGrid
可能会更容易,并利用
RowDetails
来扩展手风琴视图。 这是一个简短的教程:http://www.wpftutorial.net/DataGrid.html#rowDetails 只要确保禁用大多数数据网格功能即可。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...