Хорошо ... это своего рода двухпартер здесь. (На самом деле, на самом деле это просто один. В любом случае, я так надеюсь.)Изменить или «настроить» существующий шаблон управления TreeViewItem?
Во-первых, можно ли, в основном, указать только объект XAML в элементе управления шаблона? Например, если в шаблоне элемента управления есть ContentPresenter с именем «PART_Foo», и мы хотим конкретно установить HorizontalAlignment на этот конкретный элемент в «Stretch» с помощью чистого стиля, можно ли это сделать? Я знаю, что мы можем сделать это в переопределении OnApplyTemplate подкласса, где мы явно ищем элемент управления по имени, затем задаем свойство в коде, но опять же, мы надеемся на решение XAML, поэтому мы можем сделать это строго через стиль а не подклассы, которые в большинстве случаев не поощряются, за исключением конкретных сценариев использования.
Кроме того, мы делаем не. Вам нужно вручную указать шаблон для элемента управления, так как мы хотим, чтобы текущая тема определяла, что это за шаблон, и тем самым, как выглядит элемент управления. Мы просто хотим сказать: «В любом шаблоне, выбранном темой, если есть часть с именем« foo », установите это свойство на ней с помощью чистого стиля. Если часть с этим именем не найдена, ничего не делайте!
Желание использовать только XAML-подход является большей частью из-за второй части, на которую мы нацеливаем созданный объект-контейнер, а не самого элемента управления, что означает, что он не будет прямым подклассом, так как мы приходится гасить с помощью ItemcontainerGenerators и т. д., что является реальной болью в a $$, особенно когда виртуализируется элемент ItemsControl.
Для уточнения нашей конечной целью является выделение границы BD в шаблоне TreeViewItem TreeView и установление ее присоединенного свойства «Grid.ColumnSpan» на «2» вместо значения по умолчанию «1». Это оно! Меня поражает то, что что-то настолько простое кажется почти невозможным без ручной замены всего шаблона TreeViewItem или прибегающего к решению на основе кода.
Кстати, это то, чего мы хотим избежать, чтобы просто изменить одно вонючее свойство! http://msdn.microsoft.com/en-us/library/ms788727.aspx – MarqueIV