Как я могу поменять местами элементы управления на основе свойства зависимости?
-
05-07-2019 - |
Вопрос
Я создаю пользовательский элемент управления.
Я хочу, чтобы шаблон для этого элемента управления использовал разные элементы управления для корневого элемента управления на основе значения свойства зависимости, называемого 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>
Имейте в виду, что у вас может быть триггер для одного и того же свойства для нескольких значений, при этом каждое значение получает совершенно другой шаблон.