2011-06-01 101 views
0

我有几个标签和图像在它rectange,我有这样,当用户在矩形悬停他们的鼠标背景变为梯度:将鼠标悬停在标签改变矩形背景渐变

<Rectangle Height="88" HorizontalAlignment="Left" Margin="54,28,0,0" Name="rectangle2" VerticalAlignment="Top" 
     Width="327" Cursor="Hand"> 
    <Rectangle.Style> 
     <Style TargetType="{x:Type Rectangle}"> 
      <Setter Property="Fill" Value="Transparent" /> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Fill"> 
         <Setter.Value> 
          <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1"> 
           <GradientStop Color="White" Offset="0.0" /> 
           <GradientStop Color="#eee" Offset="1" /> 
          </LinearGradientBrush> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Rectangle.Style> 
</Rectangle> 

但是,当我将鼠标悬停在矩形上方的其中一个标签上时,背景渐变不显示。

我想让它在标签和矩形上悬停时显示渐变。

这可能吗?

回答

1

如果“过度”你的意思是叠加,而不是上面你可以将这些内容包装在一个网格(上面你可以做到这一点,以及我猜,但你应该定义行&列)并使用DataTrigger触发如果鼠标在包装网格,不仅矩形本身,如:

<Grid HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <Rectangle Width="100" Height="100" StrokeThickness="1" Stroke="Black"> 
     <Rectangle.Style> 
      <Style TargetType="{x:Type Rectangle}"> 
       <Setter Property="Fill" Value="Transparent" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=Grid}}" Value="True"> 
         <Setter Property="Fill"> 
          <Setter.Value> 
           <!-- Brush here --> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Rectangle.Style> 
    </Rectangle> 
    <Label Name="label" Content="This is a Label" /> 
</Grid> 

或者如果标签被设置IsHitTestVisiblefalse叠加就可以使鼠标事件经过的标签。

+0

在设计师的标签设置为矩形上方。 (在'订单'上下文菜单中,矩形是'发送回'选项) 这个网格解决方案效果很好!谢谢。 – 2011-06-01 15:05:29

+0

我添加了另一种方法,除非您需要鼠标才能与标签进行交互,否则应该更容易工作。 – 2011-06-01 15:06:28

+0

我不需要互动,所以你的第二种方法很好,再次感谢。 编辑:划痕,一些标签确实需要交互,所以第一种方法工作正常。 – 2011-06-01 16:02:56

相关问题