WPF изменяет ItemContainerStyle, но сохраняет базовый стиль, на который ссылаются - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть несколько стилей в ResourceDictionaries от dll третьей стороны (MaterialDesign)

 <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" />

У меня есть TreeView, который получает крутой анимационный эффект благодаря тому, что эти стили добавлены в словарь ресурсов моего UserControl.

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

У меня есть TreeView, для которого мне нужно изменить поведение, чтобы у некоторых элементов (или узлов могли быть более правильные) всегда были расширены дочерние элементы на основе свойства Binding to VM. Также, когда я выбираю элемент в древовидной структуре, дочернее дерево элемента должно автоматически расширяться. Когда я оставляю элемент, дочернее дерево должно рухнуть, если только оно не настроено на постоянное расширение. Мне удалось сделать все это путем редактирования копии TreeCon's ItemContainerStyle.

Проблема и мой вопрос, как только я определяю / редактирую свою собственную копию ItemContainerStyle, я теряю все эффекты анимации, поскольку она переопределяет стиль набора по умолчанию из Ресурса (ов) MaterialDesign. Как я могу убедиться, что мой ItemContainerStyle хранит анимации и стили также из MaterialDesign Referenced ResourceDictionary (s)?

1 Ответ

1 голос
/ 18 апреля 2019

Ключ для стиля по умолчанию - это его тип.Поэтому вы можете использовать basedon с таким ключом.

     <TreeView.ItemContainerStyle>
         <Style TargetType="{x:Type TreeViewItem}"  BasedOn="{StaticResource {x:Type TreeViewItem}}"  >
...