2017-02-22 7 views
3

Я пытаюсь определить, какой элемент в списке сосредоточен, но я не получаю обнаруженные события. Я разрабатываю для Xbox One UWP, поэтому я не могу использовать события мыши или клавиатуры, можно использовать только фокус.XAML обнаруживает, что объект списка сосредоточен или нет

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

Ваш отправитель не является изображением. Его стек. Вы должны пройти свой путь до изображения в StackPanel. – lokusking

+0

Спасибо, что указали на ошибку. Но событие не получает обнаружения, я не получаю журнал. – Muniraj

+0

Я не думаю, что стекпанель ** может ** получить фокус. Что бы это с ним сделало? –

ответ

1

Вы должны зарегистрироваться на 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; 
} 
+0

Спасибо за помощь. Я закончил с помощью MyListItem focusItem = (MyListItem) (e.OriginalSource как ListViewItem)? Content; Debug.WriteLine ("focusItem" + focusItem.Title); Debug.WriteLine ("focusItem" + focusItem.index); var temp = focusItem.Image; Bgimage.Source = (ImageSource) temp; – Muniraj

1

Вам не нужно, чтобы получить фокус состояние, чтобы получить данные из щелкнули 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; 
} 
+0

Я не могу использовать клик, потому что мне нужен фокус (xbox одна платформа - навигация). Спасибо за помощь – Muniraj

+0

Вы пробовали это на реальном xbox? У меня нет шанса, но я сомневаюсь, что вам нужно отслеживать фокус, чтобы получить выбранный элемент. –

+0

Да, я попробовал i Xbox и использовал фокус для отслеживания навигации – Muniraj

Смежные вопросы