diff --git a/A11YTools/A11YTools.Android/AndroidA11yService.cs b/A11YTools/A11YTools.Android/AndroidA11yService.cs
index bfc649e..495b79c 100644
--- a/A11YTools/A11YTools.Android/AndroidA11yService.cs
+++ b/A11YTools/A11YTools.Android/AndroidA11yService.cs
@@ -65,7 +65,7 @@ public void SetFocus(VisualElement element)
var renderer = Platform.GetRenderer(element);
var view = element.GetViewForAccessibility();
- view?.SendAccessibilityEvent(EventTypes.ViewAccessibilityFocused);
+ view?.SendAccessibilityEvent(EventTypes.ViewFocused);
}
public void SetAnnouncement(string text)
diff --git a/A11YTools/A11YTools.UWP/A11YTools.UWP.csproj b/A11YTools/A11YTools.UWP/A11YTools.UWP.csproj
index 1a165f8..968f7cd 100644
--- a/A11YTools/A11YTools.UWP/A11YTools.UWP.csproj
+++ b/A11YTools/A11YTools.UWP/A11YTools.UWP.csproj
@@ -90,6 +90,7 @@
true
+
App.xaml
@@ -98,6 +99,7 @@
+
@@ -162,4 +164,9 @@
14.0
+
+
+
+
+
\ No newline at end of file
diff --git a/A11YTools/A11YTools.UWP/AccessibleFocusBlockRenderer.cs b/A11YTools/A11YTools.UWP/AccessibleFocusBlockRenderer.cs
new file mode 100644
index 0000000..b250ba0
--- /dev/null
+++ b/A11YTools/A11YTools.UWP/AccessibleFocusBlockRenderer.cs
@@ -0,0 +1,86 @@
+using A11YTools.UWP;
+using A11YTools.Views;
+using System.ComponentModel;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Xamarin.Forms.Platform.UWP;
+
+[assembly: ExportRenderer(typeof(AccessibleFocusBlock), typeof(AccessibleFocusBlockRenderer))]
+namespace A11YTools.UWP
+{
+ public class AccessibleFocusBlockRenderer : ViewRenderer
+ {
+ private Windows.UI.Xaml.Controls.Button accessibilityHiddenBtn = null;
+
+ protected override void OnElementChanged(ElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+
+ if (e.OldElement != null && accessibilityHiddenBtn != null)
+ {
+ accessibilityHiddenBtn.Click -= AccessibilityHiddenBtn_Click;
+ accessibilityHiddenBtn.GotFocus -= AccessibilityHiddenBtn_GotFocus;
+ accessibilityHiddenBtn.LostFocus -= AccessibilityHiddenBtn_LostFocus;
+ accessibilityHiddenBtn = null;
+
+ SetNativeControl(null);
+ }
+
+ if (e.NewElement != null)
+ {
+ accessibilityHiddenBtn = new Windows.UI.Xaml.Controls.Button();
+ accessibilityHiddenBtn.IsTabStop = e.NewElement.IsTabStop;
+ accessibilityHiddenBtn.IsHitTestVisible = false;
+ accessibilityHiddenBtn.IsEnabled = e.NewElement.IsEnabled;
+ accessibilityHiddenBtn.Visibility = e.NewElement.IsTabStop && e.NewElement.IsEnabled && e.NewElement.IsVisible ? Visibility.Visible : Visibility.Collapsed;
+ accessibilityHiddenBtn.UseSystemFocusVisuals = false;
+ accessibilityHiddenBtn.Click += AccessibilityHiddenBtn_Click;
+ accessibilityHiddenBtn.GotFocus += AccessibilityHiddenBtn_GotFocus;
+ accessibilityHiddenBtn.LostFocus += AccessibilityHiddenBtn_LostFocus;
+ Canvas.SetZIndex(accessibilityHiddenBtn, -1);
+
+ SetNativeControl(accessibilityHiddenBtn);
+ }
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && Control != null)
+ {
+ accessibilityHiddenBtn.Click -= AccessibilityHiddenBtn_Click;
+ accessibilityHiddenBtn.GotFocus -= AccessibilityHiddenBtn_GotFocus;
+ accessibilityHiddenBtn.LostFocus -= AccessibilityHiddenBtn_LostFocus;
+ accessibilityHiddenBtn = null;
+
+ SetNativeControl(null);
+ }
+ base.Dispose(disposing);
+ }
+
+ protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ base.OnElementPropertyChanged(sender, e);
+
+ switch (e.PropertyName)
+ {
+ case nameof(Element.IsEnabled):
+ case nameof(Element.IsTabStop):
+ case nameof(Element.IsVisible):
+ accessibilityHiddenBtn.Visibility = Element.IsTabStop && Element.IsEnabled && Element.IsVisible ? Visibility.Visible : Visibility.Collapsed;
+ break;
+ }
+ }
+
+ private void AccessibilityHiddenBtn_GotFocus(object sender, RoutedEventArgs e)
+ {
+ }
+
+ private void AccessibilityHiddenBtn_LostFocus(object sender, RoutedEventArgs e)
+ {
+ }
+
+ private void AccessibilityHiddenBtn_Click(object sender, RoutedEventArgs e)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/A11YTools/A11YTools.UWP/UWPA11yService.cs b/A11YTools/A11YTools.UWP/UWPA11yService.cs
new file mode 100644
index 0000000..27e88b0
--- /dev/null
+++ b/A11YTools/A11YTools.UWP/UWPA11yService.cs
@@ -0,0 +1,52 @@
+using A11YTools.UWP;
+using A11YTools.Views;
+using System;
+using System.Diagnostics;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Input;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.UWP;
+
+[assembly: Dependency(typeof(UWPA11yService))]
+namespace A11YTools.UWP
+{
+ public class UWPA11yService : IA11yService
+ {
+ public void SetAnnouncement(string text)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SetControlType(VisualElement element, ControlType controlType)
+ {
+ throw new NotImplementedException();
+ }
+
+ public async void SetFocus(VisualElement element)
+ {
+ var containerElement = Platform.GetRenderer(element).ContainerElement;
+
+ FrameworkElement view = null;
+ if (containerElement is AccessibleFocusBlockRenderer)
+ {
+ view = ((Xamarin.Forms.Platform.UWP.VisualElementRenderer)containerElement).Control;
+ }
+ if (containerElement is ButtonRenderer)
+ {
+ view = ((VisualElementRenderer)containerElement).Control;
+ }
+
+ if (view == null)
+ throw new NotImplementedException();
+
+ var result = await FocusManager.TryFocusAsync(view, FocusState.Programmatic);
+
+ Debug.WriteLine($"Set focus result {result.Succeeded}");
+ }
+
+ public void SetIsClickable(VisualElement element, bool isClickable, Action clickActionThatOnlyRunsOnAndroid)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/A11YTools/A11YTools/Views/AccessibleFocusBlock.cs b/A11YTools/A11YTools/Views/AccessibleFocusBlock.cs
new file mode 100644
index 0000000..f9cd448
--- /dev/null
+++ b/A11YTools/A11YTools/Views/AccessibleFocusBlock.cs
@@ -0,0 +1,8 @@
+using Xamarin.Forms;
+
+namespace A11YTools.Views
+{
+ public class AccessibleFocusBlock : ContentView
+ {
+ }
+}
\ No newline at end of file
diff --git a/A11YTools/A11YTools/Views/SetFocus.xaml b/A11YTools/A11YTools/Views/SetFocus.xaml
index 55044e5..aea26c0 100644
--- a/A11YTools/A11YTools/Views/SetFocus.xaml
+++ b/A11YTools/A11YTools/Views/SetFocus.xaml
@@ -1,15 +1,45 @@
+ x:Class="A11YTools.Views.SetFocus"
+ xmlns:local="clr-namespace:A11YTools.Views">
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/A11YTools/A11YTools/Views/SetFocus.xaml.cs b/A11YTools/A11YTools/Views/SetFocus.xaml.cs
index f6d8e11..b1854d3 100644
--- a/A11YTools/A11YTools/Views/SetFocus.xaml.cs
+++ b/A11YTools/A11YTools/Views/SetFocus.xaml.cs
@@ -1,8 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
@@ -21,7 +17,16 @@ public SetFocus()
private void Button_Clicked(object sender, EventArgs e)
{
- _a11yService.SetFocus(theLabel);
+ _a11yService.SetFocus(afcLabel);
+ }
+ private void Button2_Clicked(object sender, EventArgs e)
+ {
+ _a11yService.SetFocus(afcLabel2);
+ }
+
+ private void Button3_Clicked(object sender, EventArgs e)
+ {
+ _a11yService.SetFocus(theButton1);
}
}
}
\ No newline at end of file