WPF: Is there a built-in TreeGrid / TreeListView?

与世无争的帅哥 提交于 2019-11-29 10:53:35

问题


I need something just like this:

(I need both the TreeView and the ListView aspects. That is, Hirearchy and Columns.)

But, I need it in WPF. is this something that is built in, or am I going to have to build it myself?

I assume it has to be somewhere in the framework, since VS2010 is build in WPF.

Edit: I have managed to get some of the functionality that I want using a TreeView and some grids with their Columns bound to a Parent grid's columns, but there are too many quirks in the functionality.

Edit 2: I still have as-of-yet not found a way to do this. Any ideas?


回答1:


This post on MSDN makes use of native WPF to achieve a TreeView/Grid hybrid. It is based on the TreeView and Grid controls. It supports a treeview with multiple columns, but does not support sorting or filtering

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

EDIT: I have recently integrated this code and it works very nicely, gives you exactly what you want: http://www.codeproject.com/Articles/30721/WPF-TreeListView-Control




回答2:


Have you considered Xceed.Wpf.DataGrid ?

You can see a Demo of Full Version here.

There's also a Community Edition as part of Extended WPF Toolkit™ - Ms-PL license

List of the features in Full version
List of the features in Community Edition
Unfortunately, I couldn't find a table-styled compilation.

P.S.

  1. By using Snoop (WPF Spy utility) and Spy++ on Visual Studio 2010 (Professional edition), I've found that the TreeGrid you see inside Watch, Local, and Autos tool-windows, is called TREEGRID which is not a Wpf component. (But I'm not sure what it is).
    Interesting though, I've found that the Breakpoints tool-window was built by using two components side-by-side - SysTreeView32 and SysListView32

  2. I'm not related to Xceed in any way :-)

Edit:
It seems that Hierarchy can be achieved on both Version, but Master-Detail is only present in the Full version, and on the Community version you can get only by using Groups.
:-(




回答3:


You may be able to fake this display using specially-aligned shared Grid objects in your templates for TreeView...

However I don't believe the one you see in Visual Studio is actually a WPF control implementation, it was there in Visual Studio 2008 as well and is likely either a custom native control or custom Windows Forms control.

Good news, though: if you must absolutely have this experience and want it soon... it's a total hack, but: use Windows Forms interop with your WPF app.

A Microsoft employee blogged a winforms TreeGridView implementation back in '06:

  • http://blogs.msdn.com/markrideout/archive/2006/01/08/510700.aspx
  • http://blogs.msdn.com/markrideout/archive/2006/01/18/new-link-for-treegridview.aspx



回答4:


You are looking for the 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>



回答5:


ObjectListView seems quite good to me...




回答6:


You can somewhat obtain this behavior with the DataGrid by following this tutorial (scroll the the Fake grouping with the help of the ViewModel section).

The tutorial's solution works well enough, but scrolling can get laggy and it's behavior unpredictable when some rows are collapsed.

Update: I changed how the children are hidden. Instead of collapsing rows, I removed items in the bound ObservableCollection. Now scrolling works perfectly!



来源:https://stackoverflow.com/questions/2703209/wpf-is-there-a-built-in-treegrid-treelistview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!