2009-02-03 7 views
0

J'ai un style différent pour les articles dans ma liste sur MouseOver qui donne un léger effet de zoom. Cela fonctionne bien, mais comme le ZIndex est défini dans l'ordre dans lequel les éléments sont ajoutés à la ListBox, l'élément zoomé sera dessiné derrière l'élément suivant. Je voudrais le régler pour que l'élément zoomé soit sur le dessus.Comment définir l'index ZI d'un élément Listbox sur MouseEnter?

J'ai essayé de créer un eventhandler MouseOver, et le réglage de la ZIndexProperty comme celui-ci

private void ListItem_MouseEnter(object sender, MouseEventArgs e) 
    { 
     var grid = sender as Grid;    
     grid.SetValue(Canvas.ZIndexProperty, 5); 
    } 

Cela ne fonctionne pas, et si je vérifie le ZIndex sans mettre du tout, je reçois toujours 0 il est donc comme si je ne regardais pas la valeur correcte. Comment puis-je modifier le ZIndexProperty correct?

Répondre

1

Vous n'incluez pas le Xaml correspondant, il est donc difficile pour moi de dire à quel événement ListItem_MouseEnter est le gestionnaire. Si c'est un gestionnaire pour un événement MouseEnter de ListBoxItem, l'expéditeur ne sera pas une grille.

Pour modifier la ZIndex d'un ListBoxItem sur MouseOver le XAML et le code ci-dessous fonctionnera:

Page.xaml

<UserControl x:Class="SilverlightApplication1.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <ListBox x:Name="ListBox1"> 
      <ListBoxItem Content="Test 1" MouseEnter="ListBoxItem_MouseEnter" /> 
      <ListBoxItem Content="Test 2" MouseEnter="ListBoxItem_MouseEnter" /> 
      <ListBoxItem Content="Test 3" MouseEnter="ListBoxItem_MouseEnter" /> 
      <ListBoxItem Content="Test 4" MouseEnter="ListBoxItem_MouseEnter" /> 
     </ListBox> 
    </Grid> 
</UserControl> 

Page.xaml.cs:

using System; 
using System.Windows.Controls; 
using System.Windows.Input; 

namespace SilverlightApplication1 
{ 
    public partial class Page : UserControl 
    { 
     public Page() 
     { 
      InitializeComponent(); 
     } 

     private void ListBoxItem_MouseEnter(object sender, MouseEventArgs e) 
     { 
      ListBoxItem listBoxItem = (ListBoxItem)sender; 

      listBoxItem.SetValue(Canvas.ZIndexProperty, 5); 
     } 
    } 
} 

Notez que le Le gestionnaire d'événements est pour chaque événement MouseEnter de ListBoxItem, ce qui signifie que l'expéditeur est un ListBoxItem.

La méthode ListBoxItem_MouseEnter modifie le Zindex à 5 sur MouseEnter, vérifiée à l'aide de Silverlight Spy.

Questions connexes