Как установить стиль и триггер стиля в WPF - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь установить стиль для управления содержимым WPF для динамического ресурса.Я могу очень легко сделать это:

<ContentControl  Style="{DynamicResource RibbonGroup}">
   ...
</ContentControl>

Если я хочу добавить триггер стиля к элементу управления контентом, я могу сделать это:

<ContentControl>
  <ContentControl.Style>
   <Style TargetType="ContentControl">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
        <Setter Property="Visibility" Value="Visible"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="False">
        <Setter Property="Visibility" Value="Collapsed"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
  ...
</ContentControl>

Если я попытаюсь объединить их в стильэлемент управления и имеют триггер, подобный следующему:

<ContentControl  Style="{DynamicResource RibbonGroup}">
  <ContentControl.Style>
   <Style TargetType="ContentControl">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
...

Этот XAML создает ошибку, которая говорит, что свойство "Стиль" установлено более одного раза.

Как выглядит XAML для установкистиль для динамического ресурса и включает триггер стиля.

Спасибо за любую помощь, которую вы можете предложить.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы не можете добавить два разных стиля к одному элементу управления, вам нужно сделать это в одном!

<ContentControl>
  <ContentControl.Style>
   <Style TargetType="ContentControl">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
        <Setter Property="Visibility" Value="Visible"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="False">
        <Setter Property="Visibility" Value="Collapsed"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
  ...
  <Style.Triggers>
    <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
  ...
</ContentControl>

Однако кажется, что вы хотите создать два стиля, которые будут иметь некоторые атрибуты, что вы можете сделать в этом случаеэто создать BaseStyle и secund стиль, где вы добавляете свойство BasedOn следующим образом:

<Style TargetType="ContentControl" BasedOn="{StaticResource <X:Key_From_Base_Style>}">
0 голосов
/ 28 февраля 2019

Как говорится, вы устанавливаете стиль дважды.Не делайте этого, используйте basedon, чтобы добавить стиль, который вы используете в качестве ресурса.

 <ContentControl>
    <ContentControl.Style>
           <Style TargetType="ContentControl" BasedOn="{StaticResource RibbonGroup}">
...