Windows 8 С# GridView e.ClickedItem

У меня есть GridView с элементами и массив с подробностями о конкретных элементах в моем GridView. Я хочу получить индекс щелкнутого элемента, я попытался использовать тот же самый код, который я использовал ранее, с ListView:

private void GridView1_ItemClick(object sender, ItemClickEventArgs e)
{
 int test = GridView1.Items.IndexOf(e.ClickedItem);
}

Когда я отлаживаю свой код, int test всегда будет иметь значение -1. Я не знаю, почему это не работает, и я надеюсь, что один из вас, ребята, сделает.

Изменить: Спасибо за все ответы! Вот дополнительная информация: я отключил SelectionMode, так как я хочу только захватить индекс ClickedItem. Я хочу знать индекс, поскольку он связан с моим массивом дополнительной информации.

Так как мой SelectionMode установлен на "Нет", я не могу захватить SelectedItem/SelectedIndex. Я попытался включить их, но снова получил значение "-1".

Изменить # 2: Я не задал никаких ItemSource, так как я добавляю элементы вручную. Это может быть проблема? У моего ListView проблем не было, не используя ItemSource.

Изменить # 3:

Код С#:

TextBlock content_textblock = new TextBlock();
content_textblock.Width = 250;
content_textblock.Text = total;
content_textblock.TextWrapping = TextWrapping.Wrap;
content_textblock.Foreground = (SolidColorBrush)Application.Current.Resources["ListViewItemOverlayForegroundThemeBrush"];
content_textblock.Style = (Style)Application.Current.Resources["CaptionTextStyle"];
content_textblock.LineHeight = 30;
content_textblock.Padding = new Thickness(5, 0, 10, 15);
content_textblock.Measure(new Size(******.PositiveInfinity, ******.PositiveInfinity));
content_textblock.Arrange(new Rect(0, 0, content_textblock.DesiredSize.Width, content_textblock.DesiredSize.Height));
StackPanel content_stackpanel = new StackPanel();
content_stackpanel.Margin = new Thickness(0, 250 - content_textblock.ActualHeight, 0, 0);
content_stackpanel.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top;
content_stackpanel.Height = content_textblock.Height;
content_stackpanel.Width = 250;
content_stackpanel.Background = (SolidColorBrush)Application.Current.Resources["ListViewItemOverlayBackgroundThemeBrush"];
content_stackpanel.Children.Add(content_textblock);
ImageBrush content_brush = new ImageBrush();
content_brush.ImageSource = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri("http://ic.tweakimg.net/ext/i/thumbs_fpa_small/1357208162.jpeg")); //it is a placeholder, haha
GridView1.Items.Add(new GridViewItem { Background = content_brush, Content = content_stackpanel, Width = 250, Height = 250 });

XAML:

2 ответа

Не знаю, почему вы так поступаете, гораздо проще объявить элементы управления в разметке и связать их в разметке с каким-либо объектом или похожим.

Но для того, чтобы получить индекс элемента, вам нужно искать элемент с щелчком элемента, что-то вроде этого:

private void GridView1_ItemClick(object sender, ItemClickEventArgs e)
{
 int test = GridView1.Items.IndexOf((e.ClickedItem as FrameworkElement).Parent);
}


-1 - это когда ни один индекс не выбран. Если вам нужно что-то сделать с помощью выбранного вами элемента, вы можете сделать это:

var item=GridView1.SelectedItem;

Если вам нужен только индекс, вы можете сделать это:

var index= GridView1.SelectedIndex;

licensed under cc by-sa 3.0 with attribution.