Как я могу поменять элементы управления на основе свойства зависимости? - PullRequest
1 голос
/ 22 октября 2009

Я создаю пользовательский элемент управления.

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

Если CanExpand имеет значение true, я хочу отобразить с помощью Expander:

<ControlTemplate ...>
   <Expander ...>
      <!--...-->
      <ContentPresenter/>
   </Expander>
</ControlTemplate>

Если CanExpand имеет значение false, я хочу отобразить вместо него HeaderedContentControl:

<ControlTemplate ...>
   <HeaderedContentControl ...>
      <!--...-->
      <ContentPresenter/>
   </HeaderedContentControl>
</ControlTemplate>

Я думал об использовании DataTemplateSelector, но это ControlTemplate, а не DataTemplate, и нет свойства селектора для шаблона элемента управления.

Я не могу установить различные элементы управления на видимый / скрытый с помощью триггера, потому что дочерний контент может жить только под одним элементом управления. Кроме того, я не думаю, что вы можете изменить свойство Content с помощью триггера.

Есть предложения?

Спасибо.

1 Ответ

2 голосов
/ 22 октября 2009

Внутри вашего стиля установите свойство ControlTemplate для состояния по умолчанию, а затем создайте триггер, который устанавливает свойство ControlTemplate для другого шаблона. Например:

<Style ...>
    <Setter Property="ControlTemplate">
        <ControlTemplate ...>    
        </ControlTemplate>
    </Setter>
    <Style.Triggers>
        <Trigger Property="YourProperty" Value="WhateverValue">
            <Setter Property="ControlTemplate">
                <ControlTemplate ...>
                </ControlTemplate>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

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

...