Xamarin Forms Dependency Service:单击按钮后更改可访问性焦点

问题描述 投票:0回答:1

我想要的是能够在单击按钮后将可访问性焦点设置为特定元素。我尝试使用依赖项服务来实现该目的,但遇到实例错误(System.NullReferenceException, Object reference not set to an instance of an object.),我认为是由于我尝试将Forms.View转换为Android.View的事实,但是我不确定是否是问题,也许我做错了其他事情。您知道如何使用依赖项服务或其他方式执行此操作吗?

[我尝试过的(目前仅在Android上:):

MainPage:

public partial class MainPage : ContentPage

{
    Button b1;
    Button b2;
    IAccessibilityFocusService service;

    public MainPage()
    {
    InitializeComponent();

            service = DependencyService.Get<IAccessibilityFocusService(DependencyFetchTarget.NewInstance);

            b1 = new Button
            {
                Text = "BUTTON 1",
                BackgroundColor = Color.Blue,
            };

            b2 = new Button
            {
                Text = "BUTTON 2",
            };
            stacklayout.Children.Add(b1);
            stacklayout.Children.Add(b2);
            b1.Clicked += Mybutton_Clicked;
     }

     private async void Mybutton_Clicked(object sender, EventArgs e)
     {
           Console.WriteLine("PIPPO clicked");
           service.ChangeAccessibilityFocus(b2);  //ERROR HERE: System.NullReferenceException, Object reference not set to an instance of an object.
     }
}

IAccessibilityFocusService:

public interface IAccessibilityFocusService { void ChangeAccessibilityFocus(View v); }

AndroidAccessibilityFocus:

public class AndroidAccessibilityFocus : IAccessibilityFocusService
{

    public void ChangeAccessibilityFocus(View v)
    {
            //first I convert the Forms.Veiw to the native android view, so that I can invoke sendAccessibilityEvent on that view.
            Platform.CreateRendererWithContext(v, Android.App.Application.Context).View.SendAccessibilityEvent(EventTypes.ViewFocused); 

    }
}
c# xamarin.forms view dependencies accessibility
1个回答
0
投票

您需要先注册您的服务才能解决它。

using Xamarin.Forms;

[assembly: Dependency(typeof(AndroidAccessibilityFocus ))]
namespace DependencyServiceDemos.iOS
{
    public class AndroidAccessibilityFocus : IAccessibilityFocusService
    {
        public void ChangeAccessibilityFocus(View v)
        {
            ...
        }
    }
}

正在用[assembly: Dependency(typeof(AndroidAccessibilityFocus ))]进行注册。

请参见Microsoft's documentation以获取更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.