diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm
index 76243493c4..362b765b3d 100644
--- a/native/Avalonia.Native/src/OSX/window.mm
+++ b/native/Avalonia.Native/src/OSX/window.mm
@@ -963,7 +963,11 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
- (BOOL)performKeyEquivalent:(NSEvent *)event
{
- return _lastKeyHandled;
+ bool result = _lastKeyHandled;
+
+ _lastKeyHandled = false;
+
+ return result;
}
- (void)keyDown:(NSEvent *)event
diff --git a/src/Avalonia.Controls/Primitives/ScrollBar.cs b/src/Avalonia.Controls/Primitives/ScrollBar.cs
index 1e290107bb..f0d8c81808 100644
--- a/src/Avalonia.Controls/Primitives/ScrollBar.cs
+++ b/src/Avalonia.Controls/Primitives/ScrollBar.cs
@@ -128,6 +128,20 @@ namespace Avalonia.Controls.Primitives
}
}
+ protected override void OnKeyDown(KeyEventArgs e)
+ {
+ if (e.Key == Key.PageUp)
+ {
+ LargeDecrement();
+ e.Handled = true;
+ }
+ else if (e.Key == Key.PageDown)
+ {
+ LargeIncrement();
+ e.Handled = true;
+ }
+ }
+
protected override void OnTemplateApplied(TemplateAppliedEventArgs e)
{
base.OnTemplateApplied(e);
diff --git a/src/Avalonia.Controls/ScrollViewer.cs b/src/Avalonia.Controls/ScrollViewer.cs
index 39854e0071..264b1fd2ce 100644
--- a/src/Avalonia.Controls/ScrollViewer.cs
+++ b/src/Avalonia.Controls/ScrollViewer.cs
@@ -4,6 +4,7 @@
using System;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Primitives;
+using Avalonia.Input;
namespace Avalonia.Controls
{
@@ -441,5 +442,19 @@ namespace Avalonia.Controls
RaisePropertyChanged(VerticalScrollBarValueProperty, 0, VerticalScrollBarValue);
RaisePropertyChanged(VerticalScrollBarViewportSizeProperty, 0, VerticalScrollBarViewportSize);
}
+
+ protected override void OnKeyDown(KeyEventArgs e)
+ {
+ if (e.Key == Key.PageUp)
+ {
+ VerticalScrollBarValue = Math.Max(_offset.Y - _viewport.Height, 0);
+ e.Handled = true;
+ }
+ else if (e.Key == Key.PageDown)
+ {
+ VerticalScrollBarValue = Math.Min(_offset.Y + _viewport.Height, VerticalScrollBarMaximum);
+ e.Handled = true;
+ }
+ }
}
}
diff --git a/src/Avalonia.Native/.gitignore b/src/Avalonia.Native/.gitignore
new file mode 100644
index 0000000000..b1153e777c
--- /dev/null
+++ b/src/Avalonia.Native/.gitignore
@@ -0,0 +1 @@
+Generated/*.cs
diff --git a/src/Avalonia.Native/Avalonia.Native.csproj b/src/Avalonia.Native/Avalonia.Native.csproj
index 9d6a82a2fb..c8ee73ad5d 100644
--- a/src/Avalonia.Native/Avalonia.Native.csproj
+++ b/src/Avalonia.Native/Avalonia.Native.csproj
@@ -7,6 +7,8 @@
/usr/bin/castxml
/usr/local/bin/castxml
true
+
+ $(MSBuildThisFileDirectory)/Generated
diff --git a/src/Avalonia.Themes.Default/ScrollBar.xaml b/src/Avalonia.Themes.Default/ScrollBar.xaml
index e128e33368..ae40929573 100644
--- a/src/Avalonia.Themes.Default/ScrollBar.xaml
+++ b/src/Avalonia.Themes.Default/ScrollBar.xaml
@@ -7,7 +7,8 @@
+ Grid.Column="0"
+ Focusable="False">
@@ -21,11 +22,13 @@
Orientation="{TemplateBinding Orientation}">
+ Classes="repeattrack"
+ Focusable="False"/>
+ Classes="repeattrack"
+ Focusable="False"/>
@@ -38,7 +41,8 @@
+ Grid.Column="2"
+ Focusable="False">
@@ -58,7 +62,8 @@
+ Grid.Column="0"
+ Focusable="False">
@@ -72,11 +77,13 @@
Orientation="{TemplateBinding Orientation}">
+ Classes="repeattrack"
+ Focusable="False"/>
+ Classes="repeattrack"
+ Focusable="False"/>
@@ -89,7 +96,8 @@
+ Grid.Column="2"
+ Focusable="False">
diff --git a/src/Avalonia.Themes.Default/ScrollViewer.xaml b/src/Avalonia.Themes.Default/ScrollViewer.xaml
index c493fb32e3..63440921d6 100644
--- a/src/Avalonia.Themes.Default/ScrollViewer.xaml
+++ b/src/Avalonia.Themes.Default/ScrollViewer.xaml
@@ -19,14 +19,16 @@
Value="{TemplateBinding HorizontalScrollBarValue, Mode=TwoWay}"
ViewportSize="{TemplateBinding HorizontalScrollBarViewportSize}"
Visibility="{TemplateBinding HorizontalScrollBarVisibility}"
- Grid.Row="1"/>
+ Grid.Row="1"
+ Focusable="False"/>
+ Grid.Column="1"
+ Focusable="False"/>