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(源代码,“导航到艺术家信息页面”);
}
}
非常感谢。我使用了您在这里提供的转换器,我的工作非常完美:)