2012-07-26 70 views
1

我有一個scrollviewer其中包含一個childview。如果該子視圖中的任何內容具有焦點並按下/上鍵,則內容向下/向上滾動。停止從上/下鍵上滾動滾動查看器

如果我沒有實現基於箭頭鍵的導航系統,這不會成爲問題。所以我使用這4個箭頭鍵更輕鬆地在對象之間導航。現在的問題是,當用戶按下或關閉時,內容會滾動。我想禁用滾動行爲。

我已經嘗試了一些事情:

  • 添加KeyDown事件的ScrollViewer中,但它從來沒有被擊中。
  • 在滾動查看器中將istabstop設置爲false
  • 將我的scrollviewer中的grid上的keyeventargs設置爲「已處理」爲true,然後我的代碼被執行(導航),因此無法使用它。

編輯

這是事件是如何在XAML處理:

<i:Interaction.Behaviors> 
    <catel:KeyPressToCommand Command="{Binding CancelCellInputCommand}" Key="Escape" /> 
    <catel:KeyPressToCommand Command="{Binding LeftArrowNavigationCommand}" Key="Left"/> 
    <catel:KeyPressToCommand Command="{Binding UpArrowNavigationCommand}" Key="Up"/> 
    <catel:KeyPressToCommand Command="{Binding RightArrowNavigationCommand}" Key="Right"/> 
    <catel:KeyPressToCommand Command="{Binding DownArrowNavigationCommand}" Key="Down"/> 
</i:Interaction.Behaviors> 

任何其他解決方案,我可能會嘗試阻止我從內容上滾動按鍵向上/向下?

編輯2:

更多的研發後,我看到爲什麼子彈1點起這樣,原因是becasue的ScrollViewer中吃keydown事件,可能使滾動發生。儘管如此,我還沒有找到解決方法。有些人說他把他的「IsTabStop」設置爲假,但這沒有任何區別。捕捉KeyUp確實有效,但爲防止按鍵滾動太遲了。我最後的手段是不使用向上/向下鍵來實現我想要的功能,但在cellgrid中上下需要上/下鍵,這只是邏輯。

我很感謝這方面的任何幫助和想法,因爲我真的在這個問題上停滯不前。

+0

你是如何實施導航系統的?在窗口中鍵入綁定?通過處理PreviewKeyDown? – GameAlchemist 2012-07-26 13:22:39

+0

@VincentPiel:更新了問題,你可以看到我現在如何獲得我的活動。 – Terry 2012-07-26 14:13:17

回答

0

終於在Silverlight forums上找到了一些東西。

畢竟,它類似於Vincent Piels解決方案,它使用PreviewKeyDown事件,但它需要一個自定義子級(contentcontrol)來在XAML中使用該事件。

2

如果您處理按鍵隧道事件PreviewKeyDown,您可以獲取該事件的OriginalSource,然後嘗試查找其可視滾動視圖祖先,該滾動視圖祖先將成爲ScrollViewer。如果你找不到ScrollViewer的祖先,那麼就像你已經做的那樣處理你的密鑰。如果你找到一個,那麼什麼都不要做。

+0

我的第三個要點是你的建議:我抓住事件,並設置e.Handled = true。問題是每次需要執行自定義時,即使可視化父項都是滾動查看器。我只是不想讓它滾動。 – Terry 2012-07-26 15:14:15

+0

所以你需要趕上它,如果它來自scrollviewer的後代(e.Handled = true在PreviewKeyDown)然後重新發送密鑰從另一個控制... – GameAlchemist 2012-07-26 21:49:25

+0

或者我不知道如果你不應該在後面的代碼中處理密鑰。少了'美麗',但更簡單的解決方案導致更好的代碼。 – GameAlchemist 2012-07-26 21:50:56