在silverlight 3 時必需要寫javascript才能做到右鍵選單,到4的時候省了javascript這一步驟,但後序的處理,還沒有像window form可以拉拉control就可以做到,要自己處理popup的open、close、選單的樣式、事件等等,很麻煩,也應此各式各樣第三方套件就出來了,像silverlight 4 toolkit中的contextmenuservice,不過呢,小弟想自己寫寫做練習,也就有了本篇。
右鍵事件
silverlight 4 時新增了二個右鍵事件
mouserightbuttondown
mouserightbuttonup
其中只有在mouserightbuttondown時handled,silverlight原本的選單才不會出現。
圖一 在mouserightbuttondown時handled的效果。
contextmenu基類
我用silverlight text editor sample的contextmenu的基類,它有一個popup,內容有一個滿版透明的canvas當contextmenu的容器,在顯示的時候,點擊contextmenu外時,結束popup。
圖二 contextmenu的基類
圖三 popup機制,最上層為contextmenu、中層透明的canvas、下層才是原畫面
在app.xaml中加入二個Resource。
ContextMenuButton為每一個Buttion的樣式,為滑鼠移入有黃色效果。
>
ListBoxContextMenu為在ListBox上按右鍵時的效果。
>
寫成DataTemplate是方便程式中載入。
實作
新增ListBoxContextMenu類,繼承ContextMenu,實作虛擬函式GetContent
return template;
}
this.DemoListBox, e);
cm.Show();
}
這純粹是學習所以才自己寫寫看,真正開發還是用Toolkit比較好。
參考資料
silverlight text editor sample
silverlight 4 contextmenu using contextmenuservice
silverlight 4 toolkit中的滑鼠右鍵選單(contextmenu)支援