Почему событие MouseLeave вызывается, даже если на элемент помещена точка мыши? - PullRequest
1 голос
/ 30 января 2011

У меня есть холст с кнопкой и рамкой:

<Grid>
    <Canvas Name="canvas1" >
        <Button  Name="button1" Visibility="Hidden" />
        <Border BorderBrush="Red" BorderThickness="6" Name="border1" />
    </Canvas>
</Grid>

Теперь то, что я хочу, это навести курсор мыши на границе 1, кнопка 1 должна быть видна, а сама граница должна быть скрыта А на мышиный выход наоборот. Так написаны следующие обработчики для двух событий:

void border1_MouseLeave(object sender, MouseEventArgs e)
{
    border1.Visibility = Visibility.Visible;
    button1.Visibility = Visibility.Hidden;
}

void border1_MouseEnter(object sender, MouseEventArgs e)
{
    border1.Visibility = Visibility.Hidden;
    button1.Visibility = Visibility.Visible;
} 

Проблема в том, что MouseLeave срабатывает, даже если я поместил указатель мыши на самой границе. Я что-то здесь не так делаю?

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

Возможно, вы захотите попробовать Background = "Transparent" на границе, но я думаю, что большая проблема в том, что вы скрываете границу.Я бы подумал, что когда вы его скрываете, вы получите событие MouseLeave, потому что ваша мышь больше не в нем, так как его больше нет.

1 голос
/ 30 января 2011

хм, я попробовал твой код, и он работает для меня.Но позвольте мне сказать, что это «в корне очень неправильно».

Прежде всего, мы обычно не делаем эти события на границе, так как обычно это тонкий элемент, и вы можете пропустить это событие, если вы двигаетесьваша мышь слишком быстрая, и в целом вы должны быть точны с ней.Лучше делать событие с тем, что находится внутри границы.

Во-вторых, как должен вызываться метод MouseLeave, если указатель мыши делает границу скрытой ?!он больше не появляется!

было бы разумнее, если бы щелкнуть по кнопке, чтобы снова появилась граница.попробуйте это:

<Grid>
    <Canvas Name="canvas1" >
        <Button Width="100" Content="button" Height="100" Name="button1" Visibility="Hidden" Click="button1_Click" />
        <Border BorderBrush="Red" BorderThickness="6" Name="border1" Canvas.Left="194" Canvas.Top="22" Height="78" Width="111" MouseEnter="border1_MouseEnter" />
    </Canvas>
</Grid>

void border1_MouseEnter(object sender, MouseEventArgs e)
    {
        border1.Visibility = Visibility.Hidden;
        button1.Visibility = Visibility.Visible;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        border1.Visibility = System.Windows.Visibility.Visible;
        button1.Visibility = System.Windows.Visibility.Hidden;
    } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...