2010-06-07 5 views
0

Я бы хотел реализовать функцию масштабирования при нажатии клавиши Ctrl. Но событие MouseWheel не запускается, когда мышь находится над ScrollView.Как отключить прокрутку в ScrollViewer, пока нажата клавиша Ctrl

Есть ли способ сделать это?

пс: 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]") в названии. Просто оставьте их в тегах. –

ответ

2

Там более простой подход без использования стиля. Поместите содержимое ScrollViewer внутри границы:

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

Это работает, спасибо – zunyite

0

Ваш код работает для меня. ScrollViewer никогда не вызывает событие, потому что ScrollViewer.OnMouseWheel уже отметил его как обработанное, но внутренний прямоугольник фактически получает событие первым. Может быть, у HasFlag() есть ошибка?

+0

Я понятия не имею, почему вы говорите, что у HasFlag() есть ошибка? – zunyite

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.

Смежные вопросы