2013-01-04 1 views
3

항목이있는 GridView과 특정 항목에 대한 세부 정보가있는 배열이 내 GridView에 있습니다. 내 코드를 디버깅 할 때Windows 8 C# GridView e.ClickedItem

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

test 항상 값 -1있을 것이다 int 형 : 나는 클릭 된 항목의 인덱스를 얻으려면 , 나는 내가 ListView와 함께 이전에 사용 된 것과 동일한 코드를 사용했습니다. 나는 이것이 작동하지 않는 이유에 대해 아무런 단서가 없다. 그리고 나는 너희 중 하나가되기를 바라고있다.

편집 : 모든 답장을 보내 주셔서 감사합니다. 여기에 몇 가지 추가 정보가 있습니다 : ClickedItem의 색인 만 캡처하기 때문에 나는 SelectionMode을 비활성화했습니다. 색인이 제 정보 배열과 연결되어 있기 때문에 색인을 알고 싶습니다.

SelectionMode이 '없음'으로 설정되어 있으므로 SelectedItem/SelectedIndex를 캡처 할 수 없습니다. 나는 그것들을 가능하게하려고했지만, 다시 '-1'값을 받았다.

편집 # 2 : 항목을 수동으로 추가 했으므로 ItemSource을 설정하지 않았습니다. 이것이 문제가 될 수 있습니까? 내 ListView에는 아무런 문제가 없었습니다. 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"/> 
+0

도움이 http://www.telerik.com/community/forums/silverlight/gridview/ 수 있을까 gridview-items-indexof-result-1.aspx –

+0

나는 그것을 시험해 보았다. 그것은 나를 위해 일한다. 어떻게 GridView를 묶는가? –

+0

btw. 왜 색인이 필요합니까? –

답변

1

망가이 그런 식으로하고있는 이유를 알고, 마크 업에서 컨트롤을 선언하고 마크 업 (markup)하여 컨트롤을 어떤 오브젝트 poperty 또는 유사한 것으로 바인딩하는 것이 훨씬 쉽습니다.

그러나,이 같은 당신이 클릭 항목 부모 검색 할 항목의 인덱스, 무언가를 얻을 :

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

내 질문에 대한 대답을 찾았습니다 : 새 전역 변수를 추가했습니다 : StackPanel [] content_stackpanel = new StackPanel [99]; 그리고 GridView1_ItemClick에 다음을 추가했습니다. int index = 0; foreach (content_stackpanel의 var 항목) { if (item == e.ClickedItem) { 휴식; } 색인 ++; } 하지만 솔루션이 효과적이기 때문에 내가 사용하겠습니다. – Zerfox

1

-1이다. 당신은 당신의 클릭 된 항목에 무언가를해야하는 경우 당신은이 작업을 수행 할 수 있습니다

var item=GridView1.SelectedItem; 

당신은 당신이 할 수있는 유일한 색인을해야하는 경우 :

var index= GridView1.SelectedIndex; 
+0

답장을 보내 주셔서 감사합니다. 새로운 정보로 게시물을 업데이트했습니다. 이 방법은 나를 위해 작동하지 않습니다. – Zerfox