Как установить ZIndex элемента списка в MouseEnter? - PullRequest
0 голосов
/ 03 февраля 2009

У меня есть другой стиль для элементов в моем списке на MouseOver, который дает небольшой эффект увеличения. Это работает хорошо, но, поскольку ZIndex установлен в порядке добавления элементов в ListBox, увеличенный элемент будет нарисован позади следующего элемента. Я хотел бы установить его так, чтобы увеличенный элемент находился сверху.

Я пытался создать обработчик событий MouseOver и установить свойство ZIndexProperty следующим образом

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

Это не работает, и если я проверяю ZIndex, не устанавливая его вообще, я всегда получаю 0, так что я не смотрю на правильное значение. Как я могу изменить правильный ZIndexProperty?

1 Ответ

1 голос
/ 04 февраля 2009

Вы не включили соответствующий Xaml, поэтому мне сложно сказать, для какого события обработчик ListItem_MouseEnter. Если это обработчик для события MouseEnter в ListBoxItem, отправителем не будет Grid.

Чтобы изменить ZIndex для ListBoxItem на MouseOver, Xaml и код ниже будут работать:

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);
        }
    }
}

Обратите внимание, что обработчик событий для каждого события MouseEnter объекта ListBoxItem означает, что отправителем является ListBoxItem.

Метод ListBoxItem_MouseEnter изменяет Zindex на 5 на MouseEnter, проверяется с помощью Silverlight Spy .

...