WPF:是否有内建的TreeGrid / TreeListView?

gmol1639  于 2022-12-14  发布在  其他
关注(0)|答案(7)|浏览(800)

我需要这样的东西:

(我需要TreeView和ListView两个方面,即层次结构和列。)
但是,我需要它在WPF中。这是内置的东西,还是我必须自己构建它?
我假设它必须在框架中的某个地方,因为VS2010是在WPF中构建的。
编辑:我已经设法使用TreeView和一些将列绑定到父网格列的网格获得了一些我想要的功能,但是功能中有太多的怪癖。
编辑2:我仍然没有找到一个方法来做到这一点。有什么想法?

acruukt9

acruukt91#

MSDN上的这篇文章利用本机WPF实现TreeView/Grid混合。它基于TreeView和Grid控件。它支持具有多列的树视图,但不支持排序或筛选
http://dlaa.me/blog/post/9898803
编辑:我最近集成了这个代码,它工作得很好,给你正是你想要的:http://www.codeproject.com/Articles/30721/WPF-TreeListView-Control

kzipqqlq

kzipqqlq2#

您是否考虑过 Xceed.Wpf.DataGrid
您可以看到完整版here的演示。
作为Extended WPF Toolkit ™ -Ms-PL license的一部分,还有一个社区
List of the features in Full version
List of the features in Community Edition
不幸的是,我找不到一个表格式的汇编。
附言
1.通过在Visual Studio 2010(专业版)上使用 * Snoop(WPF Spy实用程序)和 Spy++,我发现您在 WatchLocalAutos 工具窗口中看到的 TreeGrid 称为TREEGRID*,它不是Wpf组件。(但我不确定它是什么)。
有趣的是,我发现 Breakpoints 工具窗口是通过并排使用两个组件- * SysTreeView 32 * 和 * SysListView 32 * 构建的
1.我和Xceed没有任何关系:-)
编辑:
层次结构似乎可以在两个版本上实现,但主-详细信息仅存在于完整版本中,而在社区版本上,您只能通过使用获得。
:—(

uxhixvfz

uxhixvfz3#

这个对我来说就像一个护身符https://www.codeproject.com/Articles/30721/WPF-TreeListView-Control

  • 您使用GetChildren和HasChildren实现了ITreeModel。最好使用注册表示例检查示例代码以了解它是如何实现的。由于某种原因,开发人员忘记添加一个简单的示例...
  • 您必须自行将相依性属性加入控件,才能让它与MVVM搭配使用。2因此可能需要一些调整。3将这个属性加入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);
}
pbwdgjma

pbwdgjma4#

您可以在TreeView模板中使用特别对齐的共享Grid对象来伪造此显示...
但是,我不相信您在Visual Studio中看到的控件实际上是WPF控件实现,它在Visual Studio 2008中也有,可能是自定义本机控件或自定义Windows窗体控件。
好消息是:如果你一定要有这样的经历,并且想尽快得到它......这完全是一个黑客,但是:将Windows窗体互操作与WPF应用程序一起使用。
一位微软员工在2006年写了一篇winforms TreeGridView实现的博客:

dsf9zpds

dsf9zpds5#

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

h4cxqtbf

h4cxqtbf6#

通过遵循this tutorial(在ViewModel* 部分的帮助下滚动 *Fake分组),您可以在一定程度上使用DataGrid获得此行为。
本教程的解决方案运行得很好,但是滚动可能会变得缓慢,并且当某些行折叠时,滚动的行为不可预测。

更新:我改变了隐藏子元素的方式。我删除了绑定的ObservableCollection中的项,而不是折叠行。现在滚动可以完美工作了!

bgibtngc

bgibtngc7#

您正在寻找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>

相关问题