WPF: Есть ли встроенный TreeGrid/TreeListView?
Мне нужно что-то вроде этого:
![alt text]()
(Мне нужны аспекты TreeView и ListView. То есть Иерархия и Столбцы.)
Но мне это нужно в WPF. это что-то, что встроено, или мне придется строить это самому?
Я предполагаю, что это должно быть где-то в рамках, так как VS2010 встроен в WPF.
Изменение: мне удалось получить некоторые функциональные возможности, которые я хочу, используя TreeView и некоторые сетки с их столбцами, привязанными к столбцам родительской сетки, но в этой функциональности слишком много причуд.
Редактировать 2: Я до сих пор еще не нашел способ сделать это. Есть идеи?
Ответы
Ответ 1
Этот пост в MSDN использует собственный WPF для создания гибрида TreeView/Grid. Он основан на элементах TreeView и Grid. Он поддерживает древовидную структуру с несколькими столбцами, но не поддерживает сортировку или фильтрацию
http://dlaa.me/blog/post/9898803
EDIT: Недавно я включил этот код, и он работает очень хорошо, дает вам именно то, что вы хотите: http://www.codeproject.com/Articles/30721/WPF-TreeListView-Control
Ответ 2
Рассматривали ли вы Xceed.Wpf.DataGrid?
Вы можете увидеть демо- версию полной версии здесь.
Также имеется Community Edition в составе Extended WPF Toolkit ™ - лицензия Ms-PL.
Список возможностей в полной версии
Список функций в Community Edition
К сожалению, я не смог найти компиляцию в стиле таблицы.
PS
-
Используя Snoop (утилита WPF Spy) и Spy++ в Visual Studio 2010 (Professional edition), я обнаружил, что TreeGrid, который вы видите в окнах инструментов Watch, Local и Autos, называется TREEGRID, который не является компонентом Wpf, (Но я не уверен что это).
Интересно, что я обнаружил, что окно инструментов Breakpoints было построено с использованием двух компонентов рядом - SysTreeView32 и SysListView32.
-
Я никак не связан с Xceed :-)
Редактировать:
Похоже, что иерархия может быть достигнута как в версии, но Master-Detail присутствует только в полной версии, а в версии сообщества вы можете получить только с помощью групп.
:-(
Ответ 3
Возможно, вы сможете подделать этот экран, используя специально выровненные общие объекты Grid в ваших шаблонах для TreeView...
Однако я не считаю, что тот, который вы видите в Visual Studio, на самом деле является реализацией управления WPF, он также присутствовал в Visual Studio 2008 и, вероятно, является либо настраиваемым собственным элементом управления, либо настраиваемым элементом управления Windows Forms.
Хорошая новость: если вы должны обязательно иметь этот опыт и скоро это захотите... это общий взлом, но: используйте Windows Forms для взаимодействия с вашим WPF-приложением.
Сотрудник Microsoft зарегистрировал реализацию winforms TreeGridView
в '06:
Ответ 4
Вы ищете TreeView
http://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 [email protected]}"/>
</HierarchicalDataTemplate>
</Page.Resources>
<StackPanel>
<TreeView
ItemsSource="{Binding Source={StaticResource StaticXml}}"
ItemTemplate="{StaticResource MenuTemplate}"/>
</StackPanel>
</Page>
Ответ 5
ObjectListView кажется мне очень хорошим...
Ответ 6
Вы можете несколько получить это поведение с DataGrid, выполнив этот учебник (прокрутите поддельную группировку с помощью раздела ViewModel).
Решение для учебников работает достаточно хорошо, но прокрутка может быть ломаной, и это поведение непредсказуемо, когда некоторые строки рушится.
Обновление. Я изменил способ скрытия данных. Вместо свертывания строк я удалял элементы в связанной ObservableCollection. Теперь прокрутка отлично работает!