2011-11-23 57 views
2

我遇到了一些麻煩,我需要幫助!如何從類中提取和捕獲鼠標事件(不從控件繼承)?

我的背景:顯示一個虛擬地球3D地圖上的代碼生成多邊形

WPF Windows應用程序。

我的問題:

無法打開生成的多邊形成 「可點擊項目」。迄今所採取

步驟:

我的第一個方法是使用VE的活動連接管道,這樣做無非就是「看」超募的3D地球儀控制的所有事件並返回所有內容的列表存在於點擊位置。雖然它有效,但每次點擊鼠標時我都會得到一個完美的偏移量,使得這種方法現在無用。

我的第二種方法是將鼠標單擊處理程序附加到多邊形。爲此,我創建了這個類:

public class ExtendedPolygon:PolygonGeometry 
    { 

    } 

這擴展了原始的PolygonGeometry對象。放在這個線程giving classes click events C#然後,我已經按照建議實現事件「監聽器」和處理程序,像這樣:

public event EventHandler<MouseEventArgs> Click; 

protected void OnClick(MouseEventArgs e) 
    { 
     EventHandler<MouseEventArgs> handler = Click; 
     if (handler != null) 
     { 
      handler(this, e); 
     } 
    } 

internal void CheckIfClicked(MouseEventArgs e) 
{ 
    OnClick(e); 
} 

然後(爲簡單起見,在測試這一點),我做了所有的事件連接在我的觀點的代碼頁面:

polygon.Click +=new EventHandler<MouseEventArgs>(polygon_MouseClick); 



void pol_MouseClick(object sender, MouseEventArgs e) 
    { 
      ShowBox(" ShapeId:" + "I clicked"); 
    } 

所以,我的代碼運行,多邊形得到渲染,但沒有發生點擊事件。留下以下問題:

-Am我做錯了嗎?我應該如何附加所有的管道來從WPF上的類(不從控件繼承)捕獲並引發鼠標事件?

-有關如何解決這個問題的想法?

感謝您的閱讀和與此事有關的時間!

PS:如果有人知道一個更好的方式將事件附加到Virtual Earth的多邊形,我所有的耳朵=)

+0

使用snoop來查看Click事件是否被觸發,如果是,則由可視樹中的某些控件處理。 –

+0

@RFLG,做MouseEtner/MouseLeave的工作? – 2011-11-23 23:37:28

+0

@開王:你能詳細談談'史努比'的情況嗎? – RFLG

回答

0

我沒有看到實際調用CheckIfClicked的代碼,在原崗位這樣做在OnMouseUp覆蓋中。你的應用程序中有沒有在你的問題中列出的類似代碼?

+0

嗯,有點......因爲我沒有事件可以在WPF上重寫(或者至少我不能找到它),所以我把這個檢查勾上了Globe Control的OnClick事件。不知道這是否正確 – RFLG