Как я могу поменять местами элементы управления на основе свойства зависимости?

StackOverflow https://stackoverflow.com/questions/1608777

Вопрос

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

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

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

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

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

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

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

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

Есть какие-нибудь предложения?

Спасибо.

Это было полезно?

Решение

Внутри вашего стиля установите свойство 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>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top