我有一個名爲Location的Point屬性的節點類。我創建了這個類的幾個對象,然後把它們放在通用列表中。 在我的應用程序中,每個節點都由圖像表示(節點位置==圖像位置)。畫布兒童識別
要呈現圖像,我迭代我的節點列表並將圖像添加到我的WPF主窗口上的Canvas。基本上我的名單上的第一項是我的帆布的第一個孩子。
當我改變我的節點的位置,然後當渲染圖像自動改變。但是,如果我想使用MouseMove事件移動圖像,我不知道如何訪問我的節點列表中的特定元素。我怎麼知道哪個元素是哪個?
我有一個名爲Location的Point屬性的節點類。我創建了這個類的幾個對象,然後把它們放在通用列表中。 在我的應用程序中,每個節點都由圖像表示(節點位置==圖像位置)。畫布兒童識別
要呈現圖像,我迭代我的節點列表並將圖像添加到我的WPF主窗口上的Canvas。基本上我的名單上的第一項是我的帆布的第一個孩子。
當我改變我的節點的位置,然後當渲染圖像自動改變。但是,如果我想使用MouseMove事件移動圖像,我不知道如何訪問我的節點列表中的特定元素。我怎麼知道哪個元素是哪個?
既然你在相同的順序,在你的節點列表中的節點添加圖片到畫布上,你可以簡單地得到畫布子指標,並通過索引來訪問節點:
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];
}
}
你好。你的解決方案正在工作,但是我必須稍微改變它。問題是元素永遠不會返回null,即使我單擊空Canvas IndexOf()返回-1。我通過添加if語句來處理這個問題。 – user2847238
是的,InputHitTest在圖像之外單擊時返回Canvas實例。假設你只有圖像控件,你可以將'canvas.InputHitTest(...)寫成Image'。如果沒有圖像被點擊,它將返回'null'。但是,當然,檢查'IndexOf'是否返回'-1'總是比較安全的。 – Clemens
用鼠標單擊/拖動/懸停在特定圖像上並將其(0,0)點轉換爲畫布。
Point relativePoint = image.TransformToAncestor(myCanvas)
.Transform(new Point(0, 0));
然後遍歷您的列表並找到位置與relativePoint相同的圖像。
多數民衆贊成你如何找到一個捕獲你的鼠標光標。
此外這是一個很好的職位,閱讀有關在WPF轉換。
是你使用綁定來直接操作Canvas?發佈你的代碼,以幫助我們幫助你 –
我想你是在代碼後面complately,你直接操縱畫布?在這種情況下閱讀我申請的答案。 –