Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/xwt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVsevolod Kukol <sevoku@microsoft.com>2018-11-09 21:29:24 +0300
committerGitHub <noreply@github.com>2018-11-09 21:29:24 +0300
commitda9578b8a72ec00c521fb64ee7138d2b0a0dfee1 (patch)
treed5af63fdd264fd73793fd7a95123a665a77f67b9 /Xwt.WPF
parent071361009f2067bc87a6a949b71d0200b4ad16fc (diff)
parentb1f37d184f4b8d1b69ca968ccc59450527e39e3c (diff)
Merge pull request #863 from daserge/scrollview-keyb-focus-style-a11y
[WPF] Indicate ScrollView keyboard focus
Diffstat (limited to 'Xwt.WPF')
-rw-r--r--Xwt.WPF/Xwt.WPF.csproj6
-rw-r--r--Xwt.WPF/Xwt.WPFBackend/CustomScrollViewPort.cs4
-rw-r--r--Xwt.WPF/Xwt.WPFBackend/ScrollView.xaml41
-rw-r--r--Xwt.WPF/Xwt.WPFBackend/ScrollViewBackend.cs50
4 files changed, 96 insertions, 5 deletions
diff --git a/Xwt.WPF/Xwt.WPF.csproj b/Xwt.WPF/Xwt.WPF.csproj
index 719f015c..3d97251b 100644
--- a/Xwt.WPF/Xwt.WPF.csproj
+++ b/Xwt.WPF/Xwt.WPF.csproj
@@ -191,4 +191,10 @@
<EmbeddedResource Include="icons\remove-16~disabled.png" />
<EmbeddedResource Include="icons\remove-16~dark~disabled.png" />
</ItemGroup>
+ <ItemGroup>
+ <Resource Include="Xwt.WPFBackend\ScrollView.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Resource>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/Xwt.WPF/Xwt.WPFBackend/CustomScrollViewPort.cs b/Xwt.WPF/Xwt.WPFBackend/CustomScrollViewPort.cs
index fd388ccd..10c4e771 100644
--- a/Xwt.WPF/Xwt.WPFBackend/CustomScrollViewPort.cs
+++ b/Xwt.WPF/Xwt.WPFBackend/CustomScrollViewPort.cs
@@ -37,11 +37,13 @@ namespace Xwt.WPFBackend
internal class CustomScrollViewPort
: SWC.Panel, IScrollInfo
{
- internal CustomScrollViewPort (object widget, ScrollAdjustmentBackend verticalBackend, ScrollAdjustmentBackend horizontalBackend)
+ internal CustomScrollViewPort (object widget, SWC.ScrollViewer scrollOwner, ScrollAdjustmentBackend verticalBackend, ScrollAdjustmentBackend horizontalBackend)
{
if (widget == null)
throw new ArgumentNullException ("widget");
+ ScrollOwner = scrollOwner;
+
((FrameworkElement)widget).RenderTransform = this.transform;
if (verticalBackend != null) {
diff --git a/Xwt.WPF/Xwt.WPFBackend/ScrollView.xaml b/Xwt.WPF/Xwt.WPFBackend/ScrollView.xaml
new file mode 100644
index 00000000..6f20769e
--- /dev/null
+++ b/Xwt.WPF/Xwt.WPFBackend/ScrollView.xaml
@@ -0,0 +1,41 @@
+<ResourceDictionary
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:l="clr-namespace:Xwt.WPFBackend;assembly=Xwt.WPF">
+
+ <Style TargetType="{x:Type l:ExScrollViewer}">
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type l:ExScrollViewer}">
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition />
+ <ColumnDefinition Width="Auto" />
+ </Grid.ColumnDefinitions>
+ <Grid.RowDefinitions>
+ <RowDefinition />
+ <RowDefinition Height="Auto" />
+ </Grid.RowDefinitions>
+ <Border x:Name="PART_ScrollContentPresenter"
+ BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
+ <ScrollContentPresenter />
+ </Border>
+ <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="1"
+ Value="{TemplateBinding VerticalOffset}"
+ Maximum="{TemplateBinding ScrollableHeight}"
+ ViewportSize="{TemplateBinding ViewportHeight}"
+ Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
+ <ScrollBar x:Name="PART_HorizontalScrollBar"
+ Orientation="Horizontal"
+ Grid.Row="1"
+ Grid.Column="0"
+ Value="{TemplateBinding HorizontalOffset}"
+ Maximum="{TemplateBinding ScrollableWidth}"
+ ViewportSize="{TemplateBinding ViewportWidth}"
+ Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
+ </Grid>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+</ResourceDictionary> \ No newline at end of file
diff --git a/Xwt.WPF/Xwt.WPFBackend/ScrollViewBackend.cs b/Xwt.WPF/Xwt.WPFBackend/ScrollViewBackend.cs
index 8affbbf4..59133440 100644
--- a/Xwt.WPF/Xwt.WPFBackend/ScrollViewBackend.cs
+++ b/Xwt.WPF/Xwt.WPFBackend/ScrollViewBackend.cs
@@ -26,17 +26,49 @@
using System;
using Xwt.Backends;
-using Xwt.WPFBackend;
using System.Windows.Controls;
+using System.Windows.Media;
+using System.Windows;
+using System.Windows.Markup;
namespace Xwt.WPFBackend
{
public class ScrollViewBackend
: WidgetBackend, IScrollViewBackend
{
- public ScrollViewBackend()
+ private static readonly ResourceDictionary ScrollViewResourceDictionary;
+ static ScrollViewBackend ()
{
- ScrollViewer = new ExScrollViewer();
+ Uri uri = new Uri ("pack://application:,,,/Xwt.WPF;component/XWT.WPFBackend/ScrollView.xaml");
+ ScrollViewResourceDictionary = (ResourceDictionary) XamlReader.Load (System.Windows.Application.GetResourceStream (uri).Stream);
+ }
+
+ public ScrollViewBackend ()
+ {
+ ScrollViewer = new ExScrollViewer ();
+ ScrollViewer.Resources.MergedDictionaries.Add (ScrollViewResourceDictionary);
+ ScrollViewer.GotKeyboardFocus += ScrollViewer_GotKeyboardFocus;
+ ScrollViewer.LostKeyboardFocus += ScrollViewer_LostKeyboardFocus;
+ }
+
+ Brush previousBrush;
+ Thickness previousBrushThickness;
+ void ScrollViewer_LostKeyboardFocus (object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
+ {
+ if (BorderVisible) {
+ ScrollViewer.BorderThickness = previousBrushThickness;
+ ScrollViewer.BorderBrush = previousBrush;
+ }
+ }
+
+ void ScrollViewer_GotKeyboardFocus (object sender, System.Windows.Input.KeyboardFocusChangedEventArgs e)
+ {
+ if (BorderVisible) {
+ previousBrush = ScrollViewer.BorderBrush;
+ previousBrushThickness = ScrollViewer.BorderThickness;
+ ScrollViewer.BorderThickness = new Thickness (1);
+ ScrollViewer.BorderBrush = SystemColors.HighlightBrush;
+ }
}
public ScrollPolicy VerticalScrollPolicy
@@ -122,7 +154,7 @@ namespace Xwt.WPFBackend
vscrollControl = vbackend = new ScrollAdjustmentBackend ();
hscrollControl = hbackend = new ScrollAdjustmentBackend ();
}
- ScrollViewer.Content = new CustomScrollViewPort (widget.NativeWidget, vbackend, hbackend);
+ ScrollViewer.Content = new CustomScrollViewPort (widget.NativeWidget, ScrollViewer, vbackend, hbackend);
ScrollViewer.CanContentScroll = true;
if (vbackend != null)
@@ -169,6 +201,16 @@ namespace Xwt.WPFBackend
}
}
+ protected override void Dispose (bool disposing)
+ {
+ if (ScrollViewer != null) {
+ ScrollViewer.GotKeyboardFocus -= ScrollViewer_GotKeyboardFocus;
+ ScrollViewer.LostKeyboardFocus -= ScrollViewer_LostKeyboardFocus;
+ }
+
+ base.Dispose (disposing);
+ }
+
protected ScrollViewer ScrollViewer
{
get { return (ScrollViewer) Widget; }