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