2010-11-13 3 views
2
<Image Source="Data\Images\close_nohover.bmp"> 
    <Image.Style> 
     <Style TargetType="{x:Type Image}"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Source" Value="Data\Images\close_hover.bmp" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 

ответ

3

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

<Image> 
    <Image.Style> 
     <Style TargetType="{x:Type Image}"> 
      <Setter Property="Source" Value="Data\Images\close_nohover.bmp"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Source" Value="Data\Images\close_hover.bmp" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 
+0

Я воспользуюсь этой возможностью, чтобы немного узнать о WPF. Означает ли это, что свойства, установленные на элементе * всегда *, имеют приоритет над чем-либо, объявленным в стиле, даже если свойство, установленное в стиле, будет «более новым» (т. Е. Последним)? – stakx

+0

Да, даже если вы начнете с приведенного выше примера, а затем установите Source в коде позади или что-то еще, триггер перестанет работать. Свойства, установленные на элементе, всегда имеют приоритет над свойствами, заданными в стиле. Например, я думаю, что было бы странно, если бы у вас был стиль для прямоугольника с по умолчанию «Заливка зеленого», а затем вы устанавливаете Fill = «Red» на Rectangle, и он остается зеленым из-за стиля :) –

+1

Add: Если вы очистите значение для источника с помощью image.ClearValue (Image.SourceProperty), затем триггер начнет работать снова. –

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