2010-12-04 9 views
3

挨拶WPF - Canvas_MouseLeftButtonDownイベント

私は昨日、WPFで開発を開始し、いくつかの問題に遭遇してきました。私はCanvasがWinFormsのPanelと同等であるという理解に達しました。しかし、私は 'クリック'イベントでいくつかの問題に遭遇しています。 MouseLeftButtonDownイベント。それは、関連するのですかない場合は、このイメージとキャンバスがユーザーコントロール

Image + 3 Canvasses

である上記の画像は、私が問題を抱えていますどのような基本的です。あなたが見る3つのイメージは1つのイメージです。あなたが見る正方形は、それぞれ異なるキャンバスです。どのキャンバスがクリックされたかに応じて、私は何か違うものが欲しいと思っています。私は、アプリケーションを実行します(ユーザーコントロールがofcourseのメインウィンドウ内にある)と、キャンバスが起こる何もあってはならないところ、私はクリックすると

<Grid> 
    <Canvas Name="canvasTerran" Height="27" Width="26" Margin="88,106,134,106" MouseLeftButtonDown="canvasTerran_MouseLeftButtonDown" /> 
    <Canvas Name="canvasZerg" Height="27" Width="26" Margin="117,107,105,107" MouseLeftButtonDown="canvasZerg_MouseLeftButtonDown" /> 
    <Canvas Name="canvasProtoss" Height="27" Margin="145,107,88,107" MouseLeftButtonDown="canvasProtoss_MouseLeftButtonDown" /> 
    <Image Name="imageRaces" Height="27" Width="73" Stretch="Fill" Source="pack://application:,,,/Images/Races/Races.png" /> 
</Grid> 

は現在、私は次のコードを持っています。私が発射しようとしているイベント:

私はここで間違っているとは思わないので、どんな提案も歓迎されるでしょう。私が言ったように私はWPFの初心者ですので、私が現在試みているよりも良い方法があると思うなら、そう言いなさい!

ありがとうございます。

答えて

4

実際の問題は、キャンバスが透明であることです。したがって、すべてのイベントはキャンバスで停止するのではなく、その親要素に対して生成されます。

たとえば、キャンバスにBackground = WhiteまたはRedを設定すると、MouseLeftButtonDownが取得されます。

+1

はい、確かに、Background = "Transparent"も同様です!単にそれを標準のままにするのではなく。返信してくれてありがとう! – Citroenfris

+0

申し訳ありません - 私の外出はかなり不明でした。私はキャンバスが透明であると言っていましたが、私は実際にはビジュアルツリー階層のマウスイベントに対して透明で、背景がヌルであるという事実に頼っていました:) –

+0

ありがとうそれは私がこれに苦しんでいるので、とても愚かなようです!本当にシンプルです:P。 – Citroenfris

3

画像がキャンバスを隠すので、XAMLでは画像を宣言した後にキャンバスを宣言するので、UIの前にキャンバスが表示され、クリックが有効になります。

ヒント:キャンバスの背景色を指定するだけで、UIでの表示方法を確認できます。あなたがそうすると、イメージがそれらを隠すことがわかります。

+0

私のために働いています – Erez

+1

あなたは正しい、それは動作します。私がしなければならなかったのは、キャンバスを透明にすることでした。さもなければ、色を塗りつぶしても効果がありません。ヒントは、私は多くのあなたをありがとう助けて! – Citroenfris

関連する問題