2017-05-08 109 views
1

如果用戶鼠標懸停在堆棧面板上,我想更改堆棧面板內2個元素的顏色。有沒有辦法在wpf中這樣做,因爲我想保持我的c#代碼不受「樣式化」的干擾。用一個鼠標懸停觸發器更改多個元素

這就是我到目前爲止所做的。它只是將觸發器添加到堆棧面板內的每個元素。但那不是很安靜的理想,因爲你需要將鼠標懸停在每個元素上以調整其顏色。

   <StackPanel Orientation="Horizontal"> 
       <StackPanel.Resources> 
        <Style TargetType="{x:Type FrameworkElement}"> 
         <Setter Property="Label.Foreground" Value="#FF0296AA" /> 
         <Setter Property="Rectangle.Fill" Value="#FF0296AA" /> 
         <Style.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="Label.Foreground" Value="#FFA6FAFA" /> 
           <Setter Property="Rectangle.Fill" Value="#FFA6FAFA" /> 
          </Trigger> 
         </Style.Triggers> 
        </Style> 
        <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 
        <Style TargetType="{x:Type Rectangle}" BasedOn="{StaticResource {x:Type FrameworkElement}}" /> 
       </StackPanel.Resources> 
       <Label Content="Create an account" VerticalAlignment="Top" Padding="0,1,5,1" FontSize="13" Height="21" Cursor="Hand"/> 
       <Rectangle Height="12" Margin="0,4,0,0" Width="15" RenderTransformOrigin="0.5,0.5"> 
        <Rectangle.OpacityMask> 
         <ImageBrush ImageSource="Images/Controls/external-link-mask.png" Stretch="Uniform"/> 
        </Rectangle.OpacityMask> 
       </Rectangle> 
      </StackPanel> 
+0

_I想要更改堆棧面板中2個元素的顏色,如果用戶鼠標懸停在它上面的話._定義_it_。是否是堆疊面板? – Natrium

+0

在觸發器中,您提到了一個TextBlock,但在StackPanel中,您沒有TextBlock。 – Natrium

+0

堆棧面板內有2個元素。 1個標籤和1個矩形。我想改變那些顏色。 – Tom

回答

0

堅持貼近您現有的樣式,只是一個DataTrigger爲目標的父StackPanel

<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type StackPanel}},Path=IsMouseOver}" Value="True"> 
    <Setter Property="Label.Foreground" Value="#FFA6FAFA" /> 
    <Setter Property="Rectangle.Fill" Value="#FFA6FAFA" /> 
</DataTrigger> 

另外更換了扳機,你可能想給StackPanel一個Background="Transparent"因此它將鼠標反應而不僅僅是當鼠標正好在兒童控制命中區域之上時。

+0

完美的作品,謝謝! – Tom

相關問題