2013-10-19 106 views
2

我有一個名爲Location的Point屬性的節點類。我創建了這個類的幾個對象,然後把它們放在通用列表中。 在我的應用程序中,每個節點都由圖像表示(節點位置==圖像位置)。畫布兒童識別

要呈現圖像,我迭代我的節點列表並將圖像添加到我的WPF主窗口上的Canvas。基本上我的名單上的第一項是我的帆布的第一個孩子。

當我改變我的節點的位置,然後當渲染圖像自動改變。但是,如果我想使用MouseMove事件移動圖像,我不知道如何訪問我的節點列表中的特定元素。我怎麼知道哪個元素是哪個?

+0

是你使用綁定來直接操作Canvas?發佈你的代碼,以幫助我們幫助你 –

+0

我想你是在代碼後面complately,你直接操縱畫布?在這種情況下閱讀我申請的答案。 –

回答

2

既然你在相同的順序,在你的節點列表中的節點添加圖片到畫布上,你可以簡單地得到畫布子指標,並通過索引來訪問節點:

private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    var element = canvas.InputHitTest(e.GetPosition(canvas)) as UIElement; 

    if (element != null) 
    { 
     int index = canvas.Children.IndexOf(element); 
     node hitNode = nodelist[index]; 
    } 
} 
+0

你好。你的解決方案正在工作,但是我必須稍微改變它。問題是元素永遠不會返回null,即使我單擊空Canvas IndexOf()返回-1。我通過添加if語句來處理這個問題。 – user2847238

+0

是的,InputHitTest在圖像之外單擊時返回Canvas實例。假設你只有圖像控件,你可以將'canvas.InputHitTest(...)寫成Image'。如果沒有圖像被點擊,它將返回'null'。但是,當然,檢查'IndexOf'是否返回'-1'總是比較安全的。 – Clemens

1

用鼠標單擊/拖動/懸停在特定圖像上並將其(0,0)點轉換爲畫布。

Point relativePoint = image.TransformToAncestor(myCanvas) 
           .Transform(new Point(0, 0)); 

然後遍歷您的列表並找到位置與relativePoint相同的圖像。

多數民衆贊成你如何找到一個捕獲你的鼠標光標。

此外這是一個很好的職位,閱讀有關在WPF轉換。

http://msdn.microsoft.com/en-us/library/ms750596.aspx