Xaml AutomationProperties.HelpText不支持';不能在UWP ListView上工作

Xaml AutomationProperties.HelpText不支持';不能在UWP ListView上工作,xaml,uwp,Xaml,Uwp,我有这样一个列表视图: <ListView x:Name="ArtistsList" ItemsSource="{Binding Source={StaticResource ArtistsCVS}}" SelectionMode="None" ItemContainerStyle="{StaticResource ListViewContainerStrecher}" IsItemClickEnabled="

我有这样一个列表视图:

<ListView x:Name="ArtistsList"
          ItemsSource="{Binding Source={StaticResource ArtistsCVS}}"
          SelectionMode="None"
          ItemContainerStyle="{StaticResource ListViewContainerStrecher}"
          IsItemClickEnabled="True"
          ItemClick="ArtistsList_ItemClick">

    <ListView.ItemTemplate>
        <DataTemplate x:DataType="local:DAPP">
            <Grid AutomationProperties.Name="{Binding artist}"
                  AutomationProperties.HelpText="Navigate to artist info page.">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="80"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>

                <Image Grid.Column="0"
                       MaxWidth="60"
                       Source="{Binding thumb}"
                       HorizontalAlignment="Center"/>

                <Grid Grid.Column="1" VerticalAlignment="Center">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <TextBlock Grid.Row="0" Text="{Binding artist}"/>
                </Grid>
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

当我尝试使用“叙述者”时,它会读取艺术家名称,但不会读取帮助文本。另外,我想知道是否可以将两个值绑定到AutomationProperties.Name

例如,我有一个ArtistName和一个SongName,然后例如使用
AutomationProperties.Name=“{Binding ArtistName};{Binding SongName}”
然后它读起来像艺术家(小停顿)SongName

当我尝试使用“叙述者”时,它会读取艺术家名称,但不会读取帮助文本

DataTemplate
内设置在此处不起作用。为了解决这个问题,我们可以使用自定义和重写方法来设置自动化属性。这也是为
列表视图中的项目添加可访问性支持的推荐方法

例如:

公共类MyList:ListView
{
受保护的覆盖void PrepareContainerForItemOverride(DependencyObject元素,对象项)
{
base.PrepareContainerForItemOverride(元素、项);
FrameworkElement源=作为FrameworkElement的元素;
source.SetBinding(AutomationProperties.NameProperty,新绑定
{
路径=新属性路径(“Content.artist”),
RelativeSource=new RelativeSource(){Mode=RelativeSourceMode.Self}
});
SetHelpText(源代码,“导航到艺术家信息页面”);
}
}
然后,您可以使用
MyList
而不是
ListView
,并且不再需要在
Grid
中设置
AutomationProperties.Name
AutomationProperties.HelpText
。有关更多信息,请参阅

我想知道是否可以将两个值绑定到AutomationProperties.Name

UWP没有现成的多绑定支持。但是如果
ArtistName
songName
来自一个模型或视图模型,那么我们可以使用转换器来实现这一点,如:

公共类自动属性转换器:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、字符串语言)
{
//假设ArtistName和songName是Song类的属性
var song=(song)值;
返回$“{song?.ArtistName}-{song?.songName}”;
}
公共对象转换回(对象值、类型targetType、对象参数、字符串语言)
{
抛出新的NotImplementedException();
}
}
并使用以下转换器:

公共类MyList:ListView
{
受保护的覆盖void PrepareContainerForItemOverride(DependencyObject元素,对象项)
{
base.PrepareContainerForItemOverride(元素、项);
FrameworkElement源=作为FrameworkElement的元素;
//假设Song类是DataTemplate的数据类型
source.SetBinding(AutomationProperties.NameProperty,新绑定
{
路径=新属性路径(“内容”),
RelativeSource=new RelativeSource(){Mode=RelativeSourceMode.Self},
Converter=新的AutomationPropertiesConverter()
});
SetHelpText(源代码,“导航到艺术家信息页面”);
}
}

非常感谢。我使用了您在这里提供的转换器,我的工作非常完美:)