2010-11-24 3 views
0

Ctrl+MWheelUp/Down에 명령을 바인드 할 수있는 방법이 있습니까? 브라우저에서 글꼴 크기를 늘리거나 줄이려면 같은 작업을 할 수 있습니까? 그 효과를 WPF에서 재현하고 싶습니다. 가능한? InputBinding>MouseBindings이고 MouseAction은 마우스 스크롤을 지원하지 않는 것 같습니다.WPF InputBinding Ctrl + MWheelUp/Down 가능?

*이 나는 비슷한 질문을 게시 것 같다,하지만 더 이상

답변

1

확인을, 나는 ShellView : Window

this.KeyDown += (s, e) => 
{ 
    _leftCtrlPressed = (e.Key == Key.LeftCtrl) ? true : false; 
}; 

this.MouseWheel += (s, e) => 
{ 
    if (_leftCtrlPressed) { 
     if (e.Delta > 0) 
      _vm.Options.FontSize += 1; 
     else if (e.Delta < 0) 
      _vm.Options.FontSize -= 1; 
    } 
}; 

내가 행동 방식이보다 깨끗하고 재사용 가능한 일을 할 것이라고 생각 내에서 이런 일을했다,하지만 난 정말하지 않았다 그것. 만약 누군가 여기서 간단한 설명을했다면 좋을 것입니다.

4

그것은 매우 간단한 사용자 정의 MouseGesture 사용하여 수행 할 수 있습니다 :

<MouseBinding Gesture="{local:MouseWheel Direction=Down, Keys=Control}" Command="..." /> 
0

는 단순히 Interaction.Triggers을 사용하여 명령을 결합하십시오 XAML에서

public enum MouseWheelDirection { Up, Down} 

class MouseWheelGesture:MouseGesture 
{ 
    public MouseWheelDirection Direction { get; set; } 

    public MouseWheelGesture(ModifierKeys keys, MouseWheelDirection direction) 
     : base(MouseAction.WheelClick, keys) 
    { 
     Direction = direction; 
    } 

    public override bool Matches(object targetElement, InputEventArgs inputEventArgs) 
    { 
     var args = inputEventArgs as MouseWheelEventArgs; 
     if (args == null) 
      return false; 
     if (!base.Matches(targetElement, inputEventArgs)) 
      return false; 
     if (Direction == MouseWheelDirection.Up && args.Delta > 0 
      || Direction == MouseWheelDirection.Down && args.Delta < 0) 
     { 
      inputEventArgs.Handled = true; 
      return true; 
     } 

     return false; 
    } 

} 

public class MouseWheel : MarkupExtension 
{ 
    public MouseWheelDirection Direction { get; set; } 
    public ModifierKeys Keys { get; set; } 

    public MouseWheel() 
    { 
     Keys = ModifierKeys.None; 
     Direction = MouseWheelDirection.Down; 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return new MouseWheelGesture(Keys, Direction); 
    } 
} 

합니다.

XAML의 대화 형 네임 스페이스를 참조해야합니다.

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="PreviewMouseWheel"> 
     <cmd:InvokeCommandAction Command="{Binding MouseWheelCommand}"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

그런 다음 관련된 명령에서.

private void MouseWheelCommandExecute(MouseWheelEventArgs e) 
    { 
     if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) 
     { 
      if (e.Delta > 0) 
      { 
       if (Properties.Settings.Default.ZoomLevel < 4) 
        Properties.Settings.Default.ZoomLevel += .1; 
      } 
      else if (e.Delta < 0) 
      { 
       if (Properties.Settings.Default.ZoomLevel > 1) 
        Properties.Settings.Default.ZoomLevel -= .1; 
      } 
     } 

    } 

델타가 상승하면 마우스가 위로 스크롤됩니다. 아래로 스크롤하면 아래로 스크롤됩니다. 스크롤 가능한 내용에서 스크롤이 발생하는 응용 프로그램에서이 기능을 사용하지만 Ctrl 키가 눌려지면 응용 프로그램이 실제로 확대됩니다.

관련 문제