2017-05-08 11 views
1

ユーザーがマウスの上にマウスを置くと、スタックパネル内の2つの要素の色を変更したいと思います。 wpfでこれを行う方法はありますか?なぜなら、私はC#コードを「スタイリングのもの」からきれいに保つことが好きだからです。1つのマウスオーバートリガーで複数の要素を変更する

これは私がこれまで行ってきたことです。スタックパネル内の各要素にトリガーを追加するだけです。しかし、それはあなたの色を変更するために各要素の上にマウスを移動する必要があるので、静かではない。

近い既存のスタイルにこだわっ
   <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

_スタックパネル内の2つの要素の色を変更する場合は、ユーザーのマウスがその上にマウスを置いてください。_ _ _を定義します。 _it_はスタックパネルですか? – Natrium

+0

トリガーでは、TextBlockについて言及していますが、StackPanelではTextBlockはありません。 – Natrium

+0

スタックパネルの内側には2つの要素があります。 1つのラベルと1つの長方形。私はそれらの色を変更したい。 – Tom

答えて

0

、ちょうど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> 

親を対象とすることはまた、あなたはそれがマウスに反応するStackPanelBackground="Transparent"を与えたいと思うかもしれDataTriggerでトリガーを置き換えますマウスが子コントロールのヒットエリアを正確に上回っているときだけでなく、全体の領域でオーバーします。

+0

完璧に動作します、ありがとう! – Tom

関連する問題