2011-01-30 39 views
1

我有一個按鈕和邊框的畫布:即使鼠標點放在元素上,爲什麼MouseLeave事件被觸發?

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

現在,我想要的是在border1的了mouseenter,button1的應該是可見的和邊界本身應該被隱藏。反之亦然。所以編寫了兩個事件的處理程序:

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也會觸發。我在這裏做錯了什麼?

回答

1

嗯,我試過你的代碼,它適用於我。 但讓我只是說這是'從根本上說是非常錯誤的。

首先,我們通常不會在邊界上執行這些事件,因爲它通常是一個很薄的元素,如果您移動鼠標的速度太快,並且通常必須準確。 最好在邊界內的任何事物上進行事件。

第二,如果鼠標輸入使邊框隱藏,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; 
    } 
3

您可能要在邊境嘗試後臺=「透明」,但我認爲最大的問題是,你隱藏的邊界。我會想當你隱藏它時,你會得到一個MouseLeave事件,因爲你的鼠標已經不在它了,因爲它不再存在。

相關問題