我有一个UWP XAML ListView,希望在使用箭头键在中的项目之间切换时处理焦点事件。但是,我不知道如何处理项目的焦点事件:
<ListView ItemsSource="{x:Bind Items}"
CanDragItems="True" CanReorderItems="True" AllowDrop="True"
SelectionMode="None" IsItemClickEnabled="True" ItemClick="ListView_ItemClick">
<ListView.ItemTemplate>
<DataTemplate x:DataType="x:String">
<!-- Never fires, even with Control.IsTemplateFocusTarget="True" : -->
<StackPanel GotFocus="StackPanel_GotFocus">
<!-- Never fires: -->
<TextBlock Text="{x:Bind}" GotFocus="TextBlock_GotFocus" />
<Button Content="Foo" IsTabStop="False" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<!-- Never fires: -->
<ListViewItemPresenter [...]
GotFocus="Root_GotFocus" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
我还能在哪里听这些焦点事件?
谢谢你!Disclaimer: I work for Microsoft.
1条答案
按热度按时间rqqzpn5f1#
当使用
<ListView>
或<ListBox>
时,您不需要使用GotFocus
事件,而是在主<listView>
控件中使用SelectionChanged
事件,并在代码中获取所选<ListViewItem>
的索引。每次用户在
<ListView>
中更改其选择时,都会触发SelectionChanged
事件。ListView.SelectedIndex
返回所选<ListViewItem>
的索引号第一项为0。以下是一个示例:
XAML文件:
C#: