问题描述
|
嗨,
我正在创建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
只要确保禁用大多数数据网格功能即可。