Как сделать так, чтобы TreeView по умолчанию (System.Windows.Controls) имел тот же стиль, что и RadTreeView (telerik)? - PullRequest
3 голосов
/ 14 июня 2019

Я попытался просто изменить <<em> TreeView > на <<em> RadTreeView >, но это испортило некоторый код позади методов, поэтому я подумал, что могу просто применить стиль, но ничего не попробовалработает.

Приведенный ниже код работает нормально, я попытался изменить статический ресурс на RadTreeViewItemStyle, он без проблем компилируется, но затем я получаю сообщение об ошибке во время выполнения, которое говорит: " Может основываться только на стиле с цельютип, который является базовым типом TreeViewItem"

<TreeView.Resources>
  <Style BasedOn="{StaticResource MetroTreeViewItem}" TargetType="TreeViewItem">
    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Stretch" />
  </Style>
</TreeView.Resources>;

1 Ответ

1 голос
/ 14 июня 2019

Первое решение: вы могли бы сделать ваше TreeView расширение RadTreeView.Я думаю, что RadTreeView имеет некоторые специальные свойства зависимостей, а также использует собственный контейнер элементов.Вот почему стиль Telerik не работал должным образом на TreeView, хотя он компилируется в первую очередь.

Второе решение: может быть для извлечения стиля RadTreeView и его рефакторинга, чтобы он мог применяться к WPF TreeView.

В Visual Studio у вас есть два варианта.Первый вариант - выполнить следующие 5 простых шагов:

  1. Перейдите в XAML Designer и откройте Панель дизайна (Shift + F7)
  2. Выберите элемент, который выВы хотите извлечь стиль из (RadTreeView) и щелкнуть по нему правой кнопкой мыши
  3. . В контекстном меню выбрать Редактировать шаблон -> Редактировать копию
  4. . В диалоговом окне введитеимя для нового извлеченного стиля и нажмите Ok
  5. Теперь вы вернулись в XAML Designer.Ищите новый стиль.Он был добавлен в тот же файл, где вы выбрали тег элемента для извлечения стиля, и назван так, как вы указали ранее.Обычно он добавляется в словарь ресурсов верхнего уровня

Чтобы извлечь шаблон элементов, повторите шаги 1 и 2. Затем выберите Изменить дополнительный шаблон -> Редактировать сгенерированные элементы (ItemTemplate) изконтекстное меню.Перейдите к шагам 4 и 5.

Второй вариант - выполнить следующие 7 простых шагов, чтобы извлечь стиль элемента:

  1. Перейдите в конструктор XAML и выберите тег элемента, который выВы хотите извлечь стиль из (RadTreeView)
  2. Затем перейдите на панель Свойства и прокрутите вниз до раздела Разное
  3. Разверните Разное и прокрутите вниз до поля Стиль
  4. Справа от этого поля находится небольшой квадрат.Щелкните левой кнопкой мыши по этому квадрату, чтобы открыть контекстное меню
  5. . В контекстном меню выберите Преобразовать в новый ресурс ... .Откроется диалоговое окно.
  6. В этом диалоговом окне дайте имя новому стилю и нажмите Ok
  7. Теперь вы вернулись в XAML Designer.Ищите новый стиль.Он был добавлен в тот же файл, где вы выбрали тег элемента для извлечения стиля, и назван так, как вы указали ранее.Обычно он добавляется в словарь ресурсов верхнего уровня

. Чтобы извлечь шаблон, повторите шаги 1 и 2. Затем перейдите в поле Template .Перейдите к шагам с 4 по 7.

Третье решение: рефакторинг кода, чтобы он работал с RadTreeView.

Четвертое решение: если только контейнер элементов делает несовместимые стили, настройте TreeView на использование версии связки элементов Telerik (вместо этого)из TreeViewItem).Вы можете сделать это, расширив TreeView, а затем переопределив контейнер элементов по умолчанию:

public class MyExtendedTreeView : TreeView
{    
  protected override bool IsItemItsOwnContainerOverride(object item)
  {
    return (item is RadTreeViewItem);
  }

  protected override DependencyObject GetContainerForItemOverride()
  {
    return new RadTreeViewItem();
  }
}

Я думаю, что это ваши варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...