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;
}