2011-01-30 8 views
1

私はボタンやボーダーキャンバスがあります。マウスポイントが要素に置かれてもMouseLeaveイベントが発生するのはなぜですか?

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

は、今、私が欲しいものborder1のMouseEnterイベントであり、ボタン1見えるはずとの国境自体を非表示にする必要があります。そしてmouseleaveで、その逆も同様です。したがって、次の2つのイベントのハンドラーに書かれています。

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

問題は、マウスポインタを境界線に置いても発砲してしまうという問題です。私はここで何か間違っていますか?

答えて

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イベントを受け取ると思います。

関連する問題