2015-07-26 2 views
1

У меня возникла проблема с назначением цвета в GradientStop в триггере (поскольку триггер не может направить элемент GradientStop). Поэтому я прочитал статью об этом и нашел решение с помощью тега. Вот мой код:Дополнительные атрибуты TAG

<Border BorderThickness="1" CornerRadius="1.5" x:Name="border"> 
    <Border.Tag> 
     <Color>#FF28AAE6</Color> 
    </Border.Tag> 

    <Border.Background> 
     <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
      <GradientStop Color="{Binding ElementName=border, Path=Tag}" Offset="0" /> 
      <GradientStop Color="#FF0A78AA" Offset="1" /> 
     </LinearGradientBrush> 
    </Border.Background> 
</Border> 

<ControlTemplate.Triggers> 
    <Trigger Property="IsMouseOver" Value="True"> 
     <Setter TargetName="border" Property="Tag" Value="#FF46C8FF" /> 
    </Trigger> 
</ControlTemplate.Triggers> 

Но мне нужно установить несколько значений в этом триггере - цвет для второго GradientStop. Как мне это сделать?

+0

ли вам действительно нужно менять каждый GradientStop отдельно? – VMaleev

ответ

0

Почему бы просто не задать фон новой кисти, которую вы хотите, вместо того чтобы пытаться обновить свойства кисти?

<ControlTemplate.Triggers> 
    <Trigger Property="IsMouseOver" Value="True"> 
     <Setter TargetName="border" Property="Background"> 
      <Setter.Value> 
       <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
        <GradientStop Color="#FF46C8FF" Offset="0" /> 
        <GradientStop Color="#FF0A78AA" Offset="1" /> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
    </Trigger> 
</ControlTemplate.Triggers> 

Если вам нужно сделать, это ваш путь, вы можете создать несколько холстов с Visibilty="Collapsed" и использовать ElementBinding, чтобы получить цвета от тех

<ControlTemplate> 
    <Border BorderThickness="1" CornerRadius="1.5" x:Name="border"> 
     <Border.Background> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
       <GradientStop Color="{Binding ElementName=Canvas1, Path=Tag}" Offset="0" /> 
       <GradientStop Color="{Binding ElementName=Canvas2, Path=Tag}" Offset="1" /> 
      </LinearGradientBrush> 
     </Border.Background> 
     <Grid> 
      <Canvas Name="Canvas1" Visibility="Collapsed"> 
       <Canvas.Tag> 
        <Color>#FF28AAE6</Color> 
       </Canvas.Tag> 
      </Canvas> 
      <Canvas Name="Canvas2" Visibility="Collapsed"> 
       <Canvas.Tag> 
        <Color>#FF0A78AA</Color> 
       </Canvas.Tag> 
      </Canvas> 
     </Grid> 
    </Border> 

    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter TargetName="Canvas1" Property="Tag" Value="Yellow" /> 
      <Setter TargetName="Canvas2" Property="Tag" Value="Green" /> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

Спасибо. Я хотел бы обновить свойства кисти, потому что (когда есть только одно свойство) ему нужно гораздо меньше кода. Но эта вещь холста еще длиннее ... –

Смежные вопросы