2010-12-30 10 views
9

Deseo aumentar el tamaño de un control cada vez que el usuario pase el mouse.
El aumento de tamaño no debe reajustar los otros controles, en lugar del control de corriente se deben superponer los controles vecinos como es el caso de (pestaña imágenes) de búsqueda de Google se muestra a continuación:WPF: Con el mouse sobre un control en particular, aumente su tamaño y se superponga con los otros controles

alt text

La imagen con superposiciones borde rojo las otras imágenes.

Respuesta

11

Puede usar ScaleTransform en RenderTransform en IsMouseOver. Si desea que la Escala se haga desde el Centro del Control, puede usar RenderTransformOrigin="0.5,0.5". Además, probablemente necesite establecer ZIndex en el disparador para asegurarse de que se muestra encima de los otros controles. Ejemplo con un TextBlock

actualización
Pruébalo como esto

<ItemsControl Margin="50"> 
    <ItemsControl.Resources> 
     <Style x:Key="ScaleStyle" TargetType="TextBlock"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Grid.ZIndex" Value="1"/> 
        <Setter Property="RenderTransform"> 
         <Setter.Value> 
          <ScaleTransform ScaleX="1.1" ScaleY="1.1"/> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ItemsControl.Resources> 
    <TextBlock Style="{StaticResource ScaleStyle}" RenderTransformOrigin="0.5,0.5" Text="Something.." Background="Red" Height="20"/> 
    <TextBlock Style="{StaticResource ScaleStyle}" RenderTransformOrigin="0.5,0.5" Text="TextBlock2" Background="DarkBlue" Height="20"/> 
    <TextBlock Style="{StaticResource ScaleStyle}" RenderTransformOrigin="0.5,0.5" Text="TextBlock3" Background="DarkBlue" Height="20" Foreground="White"/> 
    <TextBlock Style="{StaticResource ScaleStyle}" RenderTransformOrigin="0.5,0.5" Text="TextBlock4" Background="DarkBlue" Height="20" Foreground="White"/> 
</ItemsControl> 
+0

Gracias .. Esto funciona. –

+0

La imagen adjunta muestra información adicional cuando el mouse se desplaza sobre la imagen ... ¿Cómo se puede hacer esto posible? –

+0

@Sudhakar Singh: Esta es una pregunta bastante difícil de responder sin conocer los detalles. Puede usar un UserControl/CustomControl donde solo muestra los detalles en IsMouseOver. Otro enfoque es editar la Plantilla para el Bloque de Texto (o el control que usa) y agregar la información adicional allí y solo mostrarla en IsMouseOver. Por favor, publique una nueva pregunta con los detalles de su problema si esto no le ayudó –

2

@Meleak ... No se puede obtener el efecto deseado cuando se tienen varios TextBlocks apilados juntos ....

por ejemplo mira esto:

<ItemsControl> 
    <TextBlock Text="Something.." Background="Red" Height="20"> 
     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="RenderTransform"> 
          <Setter.Value> 
           <ScaleTransform ScaleX="2" ScaleY="2"/> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
    <TextBlock Text="TextBlock2" Background="DarkBlue" Height="20" Foreground="White"></TextBlock> 
    <TextBlock Text="TextBlock3" Background="DarkBlue" Height="20" Foreground="White"></TextBlock> 
    <TextBlock Text="TextBlock4" Background="DarkBlue" Height="20" Foreground="White"></TextBlock> 
</ItemsControl> 
+0

Lo que necesito es un efecto superpuesto de los controles en otros controles siempre que el mouse esté suspendido. –

+1

Actualizado mi respuesta. ¿Es eso lo que estabas buscando? –

3

Para un efecto de sombreado, junto con dar la imagen de una alineación horizontal:

<ItemsControl Margin="50,200,50,0"> 
     <ItemsControl.Resources> 
      <Style x:Key="ScaleStyle" TargetType="Image"> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Grid.ZIndex" Value="1"/> 
         <Setter Property="RenderTransform"> 
          <Setter.Value> 
           <ScaleTransform ScaleX="1.1" ScaleY="1.5" /> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </ItemsControl.Resources> 

     <Image Height="100" Style="{StaticResource ScaleStyle}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="100" Source="D:\Cablevision\Cable Vision RFP DOCs\WpfApplication1\WpfApplication1\square-house-design.jpg" MouseDown="image1_MouseDown"> 
       <Image.BitmapEffect> 
      <DropShadowBitmapEffect Color="Black" Direction="320" 
    ShadowDepth="25" Softness="1" Opacity="0.5"/> 
      </Image.BitmapEffect> 
     </Image> 


     <Image Height="100" Margin="110,-100,0,0" Style="{StaticResource ScaleStyle}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" Name="image2" Stretch="Fill" VerticalAlignment="Top" Width="100" Source="D:\Cablevision\Cable Vision RFP DOCs\WpfApplication1\WpfApplication1\file.jpg" > 
         <Image.BitmapEffect> 
      <DropShadowBitmapEffect Color="Black" Direction="320" 
    ShadowDepth="25" Softness="1" Opacity="0.5"/> 
      </Image.BitmapEffect> 
     </Image > 
     <Image Height="100" Margin="220,-100,0,0" Style="{StaticResource ScaleStyle}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" Name="image3" Stretch="Fill" VerticalAlignment="Top" Width="100" Source="D:\Cablevision\Cable Vision RFP DOCs\WpfApplication1\WpfApplication1\file.jpg" MouseEnter="image1_MouseEnter" MouseLeave="image1_MouseLeave" /> 



    </ItemsControl> 
Cuestiones relacionadas