3

GridViewの特定のアイテムに関する詳細を含むアイテムと配列がありますGridView。クリックしたアイテムのインデックスを取得したいのですが、以前使用したのと同じコードをListView:で使用しようとしました。

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

コードをデバッグするとき、inttestは常に値を持ちます-1。なぜこれが機能しないのか私にはわかりません。皆さんの1人が機能することを望んでいます。

編集:すべての返信をありがとう!ここにいくつかの追加情報があります:SelectionModeのインデックスのみをキャプチャしたいので、を無効にしましたClickedItem。インデックスは私の追加情報の配列にリンクされているので、知りたいです。

「なし」に設定されているため、SelectionModeSelectedItem/SelectedIndexをキャプチャできません。それらを有効にしようとしましたが、値「-1」を再度受け取りました。

編集#2:ItemSourceアイテムを手動で追加したので、何も設定していません。これが問題でしょうか?私ListViewはnoを使用しても問題はありませんでしItemSourceた。

編集#3:

C#コード:

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(double.PositiveInfinity, double.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:

<GridView x:Name="GridView1" Margin="0,29,0,0" Grid.Row="2" SelectionMode="None" ItemClick="GridView1_ItemClick" IsItemClickEnabled="True"/>
4

2 に答える 2

1

-1は、インデックスが選択されていない場合です。クリックしたアイテムで何かをする必要がある場合これを行うことができます:

var item=GridView1.SelectedItem;

インデックスのみが必要な場合は、次のように実行できます。

var index= GridView1.SelectedIndex;
于 2013-01-04T11:53:25.033 に答える
1

なぜこのようにしているのかわからないので、マークアップでコントロールを宣言し、マークアップでオブジェクトのポパティなどにバインドする方がはるかに簡単です。

ただし、アイテムのインデックスを取得するには、次のように、クリックされたアイテムの親を検索する必要があります。

private void GridView1_ItemClick(object sender, ItemClickEventArgs e)
{
    int test = GridView1.Items.IndexOf((e.ClickedItem as FrameworkElement).Parent);
}
于 2013-01-04T14:19:09.880 に答える