如何使MasterDetailPage图标VoiceOver可访问?
问题描述:
我Xamarin.Forms应用程序的主网页由MasterDetailPage看起来像下面的:如何使MasterDetailPage图标VoiceOver可访问?
<MasterDetailPage ...>
<MasterDetailPage.Master>
<v:MasterMenuPage Title="Menu" Icon="icon_hamburger.png" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
...
</MasterDetailPage.Detail>
</MasterDetailPage>
当我尝试“听”到我的iOS上10 VoiceOver的激活程序,我注意到,语音读菜单图标为Icon Hamburger
而不是Menu
。
如何设置可访问性文本来克服此问题?
答
从翻看Xamarin.Forms源代码以及如何创建导航项目。我认为能够为该图标设置辅助功能标签的唯一方法是为NavigationPage创建自定义渲染器。
这个例子为我设置了正确的标签。
[assembly: ExportRenderer(typeof(NavigationPage), typeof(*example.iOS.CustomNavigationPageRenderer))]
namespace *example.iOS
{
public class CustomNavigationPageRenderer : NavigationRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
var button = GetNavigationButton();
if (button == null) return;
button.AccessibilityLabel = GetMasterPageTitle();
}
UIBarButtonItem GetNavigationButton()
{
var nav = this.NativeView.Subviews.OfType<UINavigationBar>().FirstOrDefault();
var navItem = nav.Items.FirstOrDefault(x => x.LeftBarButtonItem != null);
return navItem?.LeftBarButtonItem;
}
string GetMasterPageTitle()
{
var parentPages = ((Page)Element).GetParentPages();
var masterDetail = parentPages.OfType<MasterDetailPage>().FirstOrDefault();
return masterDetail?.Master?.Title;
}
}
}
答
尝试:
AutomationProperties.SetIsInAccessibleTree(yourElement, true);
AutomationProperties.SetName(yourElement, "textToBeSpoken");
您是否尝试过加入[辅助效果](https://developer.xamarin.com/guides/xamarin-forms/advanced/无障碍/)? – Damian
我试过了,但没有成功。 – Physikbuddha
您是否可以将效果代码添加到您的帖子中,并解释发生了什么 – Damian