31

我需要这样的东西:

替代文字

(我需要 TreeView 和 ListView 方面。即 Hirearchy 和 Columns。)

但是,我在 WPF 中需要它。这是内置的东西,还是我必须自己构建它?

我认为它必须在框架中的某个地方,因为 VS2010 是在 WPF 中构建的。

编辑:我已经设法使用 TreeView 和一些网格获得了一些我想要的功能,它们的列绑定到父网格的列,但是功能中有太多的怪癖。

编辑2:我仍然没有找到一种方法来做到这一点。有任何想法吗?

4

7 回答 7

12

MSDN 上的这篇文章使用原生 WPF 来实现 TreeView/Grid 混合。它基于 TreeView 和 Grid 控件。它支持具有多列的树视图,但不支持排序或过滤

http://dlaa.me/blog/post/9898803

编辑:我最近集成了这段代码,它工作得很好,给你你想要的东西:http: //www.codeproject.com/Articles/30721/WPF-TreeListView-Control

于 2012-02-03T10:36:22.487 回答
6

您是否考虑过 Xceed.Wpf.DataGrid

你可以在这里看到完整版 的演示。

还有一个社区版作为扩展 WPF Toolkit ™ 的一部分 - Ms-PL 许可证

完整版功能
列表 社区版功能列表
不幸的是,我找不到表格样式的编译。

附言

  1. 通过在 Visual Studio 2010(专业版)上使用Snoop(WPF Spy 实用程序)和Spy++,我发现您在WatchLocalAutos工具窗口中看到的TreeGrid称为TREEGRID,它不是Wpf 组件。(但我不确定它是什么)。 不过有趣的是,我发现断点工具窗口是通过并排使用两个组件构建的 - SysTreeView32SysListView32

  2. 我与 Xceed 没有任何关系 :-)

编辑:
似乎在这两个版本上都可以实现层次结构,但Master-Detail仅存在于Full 版本中,而在Community 版本中,您只能通过使用Groups获得。
:-(

于 2013-08-05T13:02:38.827 回答
0

您可以使用 TreeView 模板中特别对齐的共享网格对象来伪造此显示...

但是我不相信您在 Visual Studio 中看到的实际上是 WPF 控件实现,它也存在于 Visual Studio 2008 中,并且可能是自定义本机控件或自定义 Windows 窗体控件。

不过,好消息是:如果您必须绝对拥有这种体验并很快想要它......这完全是一个黑客,但是:使用 Windows 窗体与您的 WPF 应用程序互操作。

早在 06 年,一位 Microsoft 员工就曾在博客上写过一个 winformsTreeGridView实现:

于 2010-05-11T08:14:21.467 回答
0

这对我来说就像一个魅力。 https://www.codeproject.com/Articles/30721/WPF-TreeListView-Control

  • 您使用 GetChildren 和 HasChildren 实现 ITreeModel。最好使用注册表示例检查示例代码以了解其完成方式。由于某种原因,开发人员忘记添加一个简单的示例......
  • 您必须自己将依赖项属性添加到控件中才能使其与 MVVM 一起使用。所以它可能需要一些调整。将此添加到 TreeList.cs 以便能够绑定 TreeModel:

 

public ITreeModel TreeModel
{
    get => (ITreeModel)GetValue(TreeModelProperty);
    set => SetValue(TreeModelProperty, value);
}

public static readonly DependencyProperty TreeModelProperty =
    DependencyProperty.Register(
        "TreeModel",
        typeof(ITreeModel), 
        typeof(TreeList), 
        new PropertyMetadata(null, OnModelChanged));

private static void OnModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var treeList = (TreeList) d;
    treeList.Root.Children.Clear();
    treeList.Rows.Clear();
    treeList.CreateChildrenNodes(treeList.Root);
}
于 2020-07-16T20:37:50.660 回答
-1

ObjectListView对我来说似乎相当不错......

于 2011-01-31T01:45:16.633 回答
-1

您可以按照本教程使用 DataGrid 获得这种行为(在 ViewModel 部分的帮助下滚动Fake 分组)。

本教程的解决方案运行良好,但是滚动可能会变得迟钝,并且当某些行折叠时它的行为不可预测。

更新:我改变了孩子们的隐藏方式。我没有折叠行,而是删除了绑定的 ObservableCollection 中的项目。现在滚动完美!

于 2011-10-12T20:09:07.493 回答
-2

您正在寻找TreeViewhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treeview.aspx

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Page.Resources>
        <XmlDataProvider x:Key="StaticXml" XPath="root/foo">
            <x:XData>
                <root xmlns="">
                    <foo a="_File">
                        <foo a="New">
                            <foo a="_Project..." />
                            <foo a="_Web Site..."/>
                        </foo>
                        <foo a="C_lose"/>
                        <foo a="E_xit"/>
                    </foo>
                    <foo a="_Edit">
                        <foo a="Cu_t"/>
                        <foo a="_Copy"/>
                        <foo a="_Paste"/>
                    </foo>
                </root>
            </x:XData>
        </XmlDataProvider>
        <HierarchicalDataTemplate x:Key="MenuTemplate" ItemsSource="{Binding XPath=foo}">
            <AccessText Text="{Binding XPath=@a}"/>
        </HierarchicalDataTemplate>
    </Page.Resources>
    <StackPanel>
        <TreeView
                ItemsSource="{Binding Source={StaticResource StaticXml}}"
              ItemTemplate="{StaticResource MenuTemplate}"/>
    </StackPanel>
</Page>
于 2010-04-24T04:21:37.647 回答