我有一個滾動視圖內的畫布。我將一個keydown事件處理程序附加到scrollview。對於大多數鍵,處理程序被調用。silverlight keydown事件不會觸發箭頭鍵
但是,對於箭頭鍵,處理程序不會被調用。相反,scrollview會以適當的方向滾動。
我還附加了一個keyup處理程序的滾動視圖和keyup確實被稱爲箭頭鍵。
有沒有辦法在這裏得到箭頭鍵按下事件?
我有一個滾動視圖內的畫布。我將一個keydown事件處理程序附加到scrollview。對於大多數鍵,處理程序被調用。silverlight keydown事件不會觸發箭頭鍵
但是,對於箭頭鍵,處理程序不會被調用。相反,scrollview會以適當的方向滾動。
我還附加了一個keyup處理程序的滾動視圖和keyup確實被稱爲箭頭鍵。
有沒有辦法在這裏得到箭頭鍵按下事件?
我發現這個愚蠢的黑客使其工作。將scrollview設置爲不是tabstop可以避免吃掉關鍵事件......但是後來我在頁面上又出現了另一個文本框,突然之間一直突然關注,因爲scrollview沒有了。所以我通過讓一個不可見的文本框獲得焦點來解決這個問題。
scrollView.IsTabStop = false;
invisibleTextBox.Foreground = new SolidColorBrush(Colors.Transparent);
invisibleTextBox.Background = new SolidColorBrush(Colors.Transparent);
Canvas.SetZIndex(invisibleTextBox, -1000);
invisibleTextBox.KeyDown += new KeyEventHandler(HandleKeyDown);
invisibleTextBox.KeyUp += new KeyEventHandler(HandleKeyUp);
編輯:我也不得不將文本框從畫布上移開,因爲儘管看不見,它的輪廓仍然顯示出來。
第2編輯:我使用了一個文本框,因爲這是我發現的第一件可以捕獲KeyDown事件的東西。但是,UserControl可以。所以使用UserControl代替不可見的文本框可能會更好。如果需要,可以在UserControl上調用Focus()。
這是一個可能的答案 - 我還沒有機會測試這個。儘管過去我也遇到類似的麻煩,但是在控制權消耗事件之前,你可以先看看它們。有幾件事你可以嘗試:
除了1)所有這些都算作黑客,真的,但祝你好運,我希望他們中的一個適合你! 「
」使用PreviewKeyDown事件,我認爲這就是它的名稱,它可以讓你在事件被控件佔用之前得到它。「
This Works。只要將事件參數設置爲「Handled = true」,ScrollViewer(或ListBox)就不會在處理完事件後抓住事件。雖然我不需要使用ListBox的IsTabStop屬性;而且它似乎沒有做任何事情。
只需使用KeyUp事件。奇蹟般有效。
在WPF中工作,但silverlight沒有預覽關鍵字down – 2010-01-05 22:56:19