Member 12658724 Ответов: 1

Использование расширителя в treeview


В принципе, мне нужно что-то с управлением экспандером.
У меня есть основной расширитель. Под ним есть много разделов. Что я хочу, так это поместить секции в древовидный вид. Каждая секция также имеет свой собственный расширитель. Главный детандер контролирует все. А это значит, что если он рухнет, то все секции должны быть свернуты, и наоборот.

Часть подменыша заключается в том, что я хочу установить фон. Я хочу, чтобы фон экспандеров был другим. Когда секции расширяются, фон секций отличается от фона основного расширителя.

Что я уже пробовал:

Я попытался использовать шаблон для настройки расширителей, но не уверен, как вызвать фон с помощью стилей. Я не могу найти подобный пример в интернете. Нужна помощь.

Graeme_Grant

Вы смотрели на шаблон TreeView? Они уже экспандеры, вам нужно только их стилизовать. Вы можете посмотреть шаблон здесь: Стили и шаблоны TreeView | Microsoft Docs[^]

Member 12658724

Ты имеешь в виду, что я должен стилизовать эту болтовню? Когда я нажму на него, стиль будет изменен каким-то триггером?

Graeme_Grant

У вас есть полный контроль над внешним видом и чувствами, чтобы достичь того, что вы хотите. Я делаю именно это в Примере WpfFileExplorer в этой статье: Работа с JSON в C# и VB[^]

1 Ответов

Рейтинг:
1

Clifford Nelson

Вы можете использовать VisualTreeHelper:

private static IEnumerable<T> FindVisualChildren<T>(DependencyObject root) where T : DependencyObject
 {
     if (root != null)
         for (int i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++)
         {
             DependencyObject child = VisualTreeHelper.GetChild(root, i);
             if (child is T) yield return (T)child;
             foreach (T childOfChild in FindVisualChildren<T>(child))
                 yield return childOfChild;
         }
 }



использовать следующее

var treeItems = FindVisualChildren<treeviewitem> (this),ToList();
treeItems.ForEach(I => i.IsExpanded = false);