2010-06-07 27 views
0

我想在按住Ctrl鍵的同時實現縮放功能。 但鼠標懸停在ScrollView上時,MouseWheel事件不會觸發。如何在按住Ctrl的同時禁用ScrollViewer中的滾動

有沒有辦法做到這一點?

PS:Silverlight的4.0

<UserControl x:Class="SilverlightApplication11.MainPage" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     d:DesignHeight="300" 
     d:DesignWidth="400"> 

<Grid x:Name="LayoutRoot" 
     Background="White"> 
    <ScrollViewer Background="Gray" 
        MouseWheel="ScrollViewer_MouseWheel" 
        x:Name="scrollViewer"> 
     <Rectangle Width="200" 
        Height="2000" 
        MouseWheel="ScrollViewer_MouseWheel" 
        Fill="AliceBlue" /> 
    </ScrollViewer> 
</Grid> 

private void ScrollViewer_MouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     if (Keyboard.Modifiers.HasFlag(ModifierKeys.Control)) 
     { 
      zoom+=0.1; 
      e.Handled = true; 
     } 
    } 
+1

@zunyite:請不要在標題中重複標記(「[Silverlight]」)。只要將它們留在標籤中即可。 – 2010-06-07 18:53:51

回答

2

有不使用的樣式比較簡單的方法。把ScrollViewer的內容放在Border裏面吧:

<ScrollViewer> 
    <Border MouseWheel="ScrollViewer_MouseWheel" Background="#01b0b0b0"> <!-- almost transparent to intercept events --> 
     <!-- ... your content goes here ... --> 
    </Border> 
</ScrollViewer> 
+0

它的工作原理,謝謝 – zunyite 2010-06-22 11:45:39

0

您的代碼爲我工作。 ScrollViewer從不引發事件,因爲ScrollViewer.OnMouseWheel已經將它標記爲已處理,但內部Rectangle實際上首先獲取事件。也許HasFlag()有一個錯誤?

+0

我不知道爲什麼你說HasFlag()有一個錯誤? – zunyite 2010-06-14 10:45:01

0

我找到了一個解決辦法:

的ScrollViewer中創建一個樣式,並ScrollContentPresenter之前添加邊框,像下面

<Border MouseWheel="ScrollViewer_MouseWheel" 
             Background="Transparent"/> 
<ScrollContentPresenter x:Name="ScrollContentPresenter" 
              Cursor="{TemplateBinding Cursor}" 
              ContentTemplate="{TemplateBinding ContentTemplate}" 
              Margin="{TemplateBinding Padding}" /> 
2

我也有這個問題。當您點擊ScrollViewer時,我通過在ScrollViewer上設置鍵盤焦點來修復它。

相關問題