XAML обнаруживает, сфокусирован элемент списка или нет

Я пытаюсь определить, на каком элементе списка есть фокус, но я не получаю обнаруженные события. Я занимаюсь разработкой для 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;
}

2 ответа

Решение

Вы должны зарегистрироваться на 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, ItemClick событие ListView может быть то, что вы ищете:

<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;
}
Другие вопросы по тегам