WPF: есть ли встроенный TreeGrid / TreeListView? - PullRequest
26 голосов
/ 24 апреля 2010

Мне нужно что-то вроде этого:

alt text

(Мне нужны аспекты TreeView и ListView. То есть Иерархия и Столбцы.)

Но мне это нужно в WPF. это что-то встроенное или мне придется самому его строить?

Я предполагаю, что это должно быть где-то в структуре, поскольку VS2010 встроен в WPF.

Edit: Мне удалось получить некоторые функции, которые мне нужны, с помощью TreeView и некоторых сеток, столбцы которых привязаны к столбцам родительской сетки, но в этой функциональности слишком много причуд.

Редактировать 2: Я до сих пор еще не нашел способ сделать это. Есть идеи?

Ответы [ 6 ]

10 голосов
/ 03 февраля 2012

Этот пост в MSDN использует собственный WPF для создания гибридного TreeView / Grid. Он основан на элементах управления TreeView и Grid. Он поддерживает древовидную структуру с несколькими столбцами, но не поддерживает сортировку или фильтрацию

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

РЕДАКТИРОВАТЬ: я недавно интегрировал этот код, и он работает очень хорошо, дает вам именно то, что вы хотите: http://www.codeproject.com/Articles/30721/WPF-TreeListView-Control

5 голосов
/ 05 августа 2013

Рассматривали ли вы Xceed.Wpf.DataGrid ?

Вы можете увидеть демоверсию Полная версия здесь .

Существует также Community Edition в составе Extended WPF Toolkit ™ - Лицензия Ms-PL

Список функций в полной версии
Список функций в Community Edition
К сожалению, я не смог найти компиляцию в стиле таблицы.

приписка

  1. Используя Snoop (утилита WPF Spy) и Spy ++ в Visual Studio 2010 (Professional edition), я обнаружил, что TreeGrid вы видите внутри Часы , Локальные и Авто Окна инструментов, называются TREEGRID , который не компонент Wpf. (Но я не уверен, что это).
    Интересно, что я обнаружил, что окно инструментов Breakpoints было построено с использованием двух компонентов рядом - SysTreeView32 и SysListView32

  2. Я никак не связан с Xceed: -)

Edit:
Кажется, что Иерархия может быть достигнута в обеих версиях, но Master-Detail присутствует только в Полная версия , а в Community version вы можете получить только используя Группы .
: - (

1 голос
/ 11 мая 2010

Вы можете подделать этот экран, используя специально выровненные общие объекты Grid в ваших шаблонах для TreeView ...

Однако я не верю, что та, которую вы видите в Visual Studio, на самом деле является реализацией элемента управления WPF, она также была в Visual Studio 2008 и, вероятно, является либо собственным собственным элементом управления, либо пользовательским элементом управления Windows Forms.

Хорошие новости, хотя: если вы обязательно должны иметь этот опыт и хотите его в ближайшее время ... это полный взлом, но: используйте взаимодействие Windows Forms с вашим приложением WPF.

Сотрудник Microsoft опубликовал в блоге winforms TreeGridView реализацию еще в '06:

0 голосов
/ 13 октября 2011

Такое поведение можно получить с помощью DataGrid, следуя этому руководству (прокрутите группировку Fake с помощью раздела ViewModel ).

Решение учебного пособия работает достаточно хорошо, но прокрутка может стать запаздывающей, и ее поведение непредсказуемо, когда некоторые строки свернуты.

Обновление : я изменил способ скрытия детей. Вместо сворачивания строк я удалил элементы в связанной ObservableCollection. Теперь прокрутка работает отлично!

0 голосов
/ 31 января 2011

ObjectListView мне кажется довольно хорошим ...

0 голосов
/ 24 апреля 2010

Вы ищете 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>
...