diff --git a/demo/Ursa.Demo/Pages/ImageViewerDemo.axaml b/demo/Ursa.Demo/Pages/ImageViewerDemo.axaml index 9cfcb96..d2f956f 100644 --- a/demo/Ursa.Demo/Pages/ImageViewerDemo.axaml +++ b/demo/Ursa.Demo/Pages/ImageViewerDemo.axaml @@ -8,6 +8,10 @@ d:DesignHeight="450" d:DesignWidth="800" mc:Ignorable="d"> + + + + - + ColumnDefinitions="*, Auto, *" + IsVisible="{Binding #maskSwitch.IsChecked}"> + + + + - + + + + diff --git a/src/Ursa/Controls/ImageViewer/ImageViewer.cs b/src/Ursa/Controls/ImageViewer/ImageViewer.cs index 9f73931..fcf13a4 100644 --- a/src/Ursa/Controls/ImageViewer/ImageViewer.cs +++ b/src/Ursa/Controls/ImageViewer/ImageViewer.cs @@ -72,10 +72,29 @@ public class ImageViewer: TemplatedControl get => _translateY; set => SetAndRaise(TranslateYProperty, ref _translateY, value); } + + public static readonly StyledProperty SmallChangeProperty = AvaloniaProperty.Register( + nameof(SmallChange), defaultValue: 1); + + public double SmallChange + { + get => GetValue(SmallChangeProperty); + set => SetValue(SmallChangeProperty, value); + } + + public static readonly StyledProperty LargeChangeProperty = AvaloniaProperty.Register( + nameof(LargeChange), defaultValue: 10); + + public double LargeChange + { + get => GetValue(LargeChangeProperty); + set => SetValue(LargeChangeProperty, value); + } static ImageViewer() { + FocusableProperty.OverrideDefaultValue(true); OverlayerProperty.Changed.AddClassHandler((o, e) => o.OnOverlayerChanged(e)); SourceProperty.Changed.AddClassHandler((o, e) => o.OnSourceChanged(e)); TranslateXProperty.Changed.AddClassHandler((o,e)=>o.OnTranslateXChanged(e)); @@ -201,4 +220,25 @@ public class ImageViewer: TemplatedControl PseudoClasses.Set(PC_Moving, false); _moving = false; } + + protected override void OnKeyDown(KeyEventArgs e) + { + double step = e.KeyModifiers.HasFlag(KeyModifiers.Control) ? LargeChange : SmallChange; + switch (e.Key) + { + case Key.Left: + TranslateX -= step; + break; + case Key.Right: + TranslateX += step; + break; + case Key.Up: + TranslateY -= step; + break; + case Key.Down: + TranslateY += step; + break; + } + base.OnKeyDown(e); + } } \ No newline at end of file