2015-06-30 2 views
0

Я создаю собственный WPF элемент управления содержимым, который имеет свойство DisplayMode, которое может быть:WPF пользовательских элементов управления, отображающая Content Инлайн или в Popup

  • Инлайн
  • Popup

Когда DisplayMode = "Inline", мой ControlTemplate может использовать стандартный ContentPresenter, как обычно.

Однако, когда DisplayMode = «Всплывающее окно», я хочу, чтобы Содержимое отображалось в элементе управления всплывающим окном.

Как решить эту проблему?

Должно ли это происходить исключительно в коде при изменении свойства DisplayMode? Как перемещать содержимое свойства Content между ContentPresenter и Popup?

ответ

0

Похоже, я пытался сделать это более сложным, чем на самом деле.

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

Далее, все, что мне нужно было сделать, это создать пару триггеров стиля, которые меняют ControlTemplate на основе значения свойства DisplayMode.

Это выглядит следующим образом:

<Style x:Key="MyControlStyle" TargetType="{x:Type my:MyControl}"> 
    <Setter Property="Template" Value="{StaticResource InlineTemplate}"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding DisplayMode}" Value="Inline"> 
      <Setter Property="Template" Value="{StaticResource InlineTemplate}"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding DisplayMode}" Value="Overlay"> 
      <Setter Property="Template" Value="{StaticResource OverlayTemplate}"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style>