2014-10-11 81 views
-1

我有一個畫布對象,其中有很多橢圓在代碼中生成。我爲MouseDown設置了事件處理程序。但是,它不起作用。我挖這個有很多和我有一個非常簡單的情況下結束: 我有一個網格,根和畫布裏面一個窗口:WPF:畫布和形狀鼠標事件不起作用

XML:在代碼

<Window x:Class="SQLparserTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="900" Width="1280" > 
<Grid> 
    <Canvas x:Name="canvas" MouseDown="canvasMouseDown" Background="Red"> 
    </Canvas> 
    <TextBlock x:Name="tooltip" Margin="10">0</TextBlock> 
    <Button x:Name="b" Width="10" Height="10" HorizontalAlignment="Left" VerticalAlignment="Top" Click="buttonClick"/>   
</Grid> 
</Window> 

而產生的處理程序:

private void canvasMouseDown(object sender, MouseButtonEventArgs e) 
     { 
      MessageBox.Show("MouseDown"); 
     } 

我能找到的大多數解決方案都是關於設置背景顏色而不是空值。但是我的代碼不工作(事件從不會觸發)。

有人可以告訴我爲什麼它不起作用嗎?

謝謝。

+0

畫布的大小是多少?你真的關注畫布嗎? – 2014-10-11 12:32:25

回答

1

由於TextBlock在畫布上。
如果您沒有設置TextBlock的大小,它將被拉伸。

也許如果你點擊最邊緣,那麼消息框就會被調用。
您可以通過設置文本塊的背景來確認文本塊大小。

或者您應該設置一個屬性,名稱爲IsHitTestVisibleFalse
like

<TextBlock x:Name="tooltip" Margin="10" IsHitTestVisible="False">0</TextBlock> 
+0

聖潔,這解決了我的問題。不知道是否有一種更優雅的方式,或者爲什麼事件不會出現在畫布上......(我有橢圓,這是造成麻煩的原因) – 2017-02-09 11:15:54