XAML 检测列表视图项目是否获得焦点

XAML detect if listview item is focused or not

我正在尝试检测列表视图中的哪个项目被聚焦,但我没有检测到事件。我正在为 Xbox One UWP 开发,所以我不能使用鼠标或键盘事件,只能使用焦点。

<ListView.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Vertical" GotFocus="StackPanel_GotFocus" >
            <StackPanel Name="Imagestack" Orientation="Horizontal">
                <Image Source="{Binding Image}" Height="144" Width="256" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Title}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </StackPanel>
        </StackPanel>
    </DataTemplate>
</ListView.ItemTemplate>
private void StackPanel_GotFocus(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("Image focus");
    Image img = sender as Image;
    Bgimage.Source = img.Source;
}

您应该注册参加 ListView.GotFocus 活动。

事件参数中的 OriginalSource 将成为获得焦点的 ListViewItem。然后,您可以使用 ListViewItem.Content.

检索项目内容

XAML:

<ListView x:Name="list" GotFocus="list_GotFocus">
     <ListView.ItemTemplate>...</ListView.ItemTemplate>
</ListView>

后面的代码:

private void list_GotFocus(object sender, RoutedEventArgs e)
{
     var focusedItem = (e.OriginalSource as ListViewItem)?.Content; 
}

您无需获取焦点状态即可从单击的 ListViewItem 获取数据,ListViewItemClick 事件可能正是您要查找的内容:

<ListView x:Name="LV_Items"
          IsItemClickEnabled="True"
          ItemClick="LV_Items_ItemClick"
          >
</ListView>

private void LV_Items_ItemClick(object sender, ItemClickEventArgs e)
{
    // Get instance of the model in the clicked ListViewItem
    MyModel myModel = (MyModel)e.ClickedItem;

    Image img = myModel.Image;
}