2014-01-09 121 views
1

我已經使用wrappanel和listbox在wp7上顯示我的項目。但項目點擊事件不起作用。我的代碼如下wrappanel listbox item select event

<Grid x:Name="ContentPanel" Grid.Row="1" Height="Auto"> 
      <ListBox x:Name="lstDevice"> 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <toolkit:WrapPanel/>       
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
       <ListBox.ItemTemplate> 
        <DataTemplate > 
         <StackPanel> 
          <Button x:Name="btnData" > 
           <StackPanel Orientation="Vertical"> 
            <Canvas 
              Width="175" 
              Height="175"/>            
            <TextBlock Text="{Binding Name}" Width="175" /> 
           </StackPanel> 
          </Button> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </Grid> 

上面是設計代碼和C#代碼如下

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
     { 
      lstDevice.ItemsSource = MainPage.user.dArray.ToList();    
      lstDevice.SelectionChanged += item_Select; 
     } 

     private void item_Select(object sender, SelectionChangedEventArgs e) 
     { 
      int p = ((ListBox)sender).SelectedIndex; 
     } 

如何生成列表框項目選擇事件,並獲得數或某些屬性識別選擇了哪個項目?提前致謝!

回答

1

我更好地想,這可能適合你:

<Grid x:Name="ContentPanel" Grid.Row="1" Height="Auto"> 
      <ListBox x:Name="lstDevice"> 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <toolkit:WrapPanel/>       
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
       <ListBox.ItemTemplate> 
        <DataTemplate > 
          <Button x:Name="btnData" Click="OnButtonClick" Tag="{Binding Name}" > 
           <StackPanel Orientation="Vertical"> 
            <Canvas 
              Width="175" 
              Height="175"/>            
            <TextBlock Text="{Binding Name}" Width="175" /> 
           </StackPanel> 
          </Button> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </Grid> 

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     lstDevice.ItemsSource = MainPage.user.dArray.ToList();    
    } 

    private void OnButtonClick(object sender, RoutedEventArgs e) 
    { 
     Button b = (Button)sender; 
     var nameInTag=b.Tag.ToString(); 
    } 
+1

謝謝!夥計! 它的工作原理! – Kevan

+0

現在我的dArray已經將信息傳遞給OnButtonClick方法中的lstDevice.ItemSource 我想知道點擊了哪個dArray元素。你有什麼想法如何做到這一點? – Kevan

+0

什麼是dArray?我會使用lambda表達式類似'var c = dArray.Where(x => x == nameInTag).Select(x => x).FirstOrDefault();' –

0
Make change in your xaml and cs code like this: 

<Grid x:Name="ContentPanel" Grid.Row="1" Height="Auto"> 
       <ListBox x:Name="lstDevice" SelectionChange="item_Select"> 
        <ListBox.ItemsPanel> 
         <ItemsPanelTemplate> 
          <toolkit:WrapPanel/>       
         </ItemsPanelTemplate> 
        </ListBox.ItemsPanel> 
        <ListBox.ItemTemplate> 
         <DataTemplate > 
          <StackPanel> 
           <Button x:Name="btnData" > 
            <StackPanel Orientation="Vertical"> 
             <Canvas 
               Width="175" 
               Height="175"/>            
             <TextBlock Text="{Binding Name}" Width="175" /> 
            </StackPanel> 
           </Button> 
          </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </Grid> 


     private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
      { 
       lstDevice.ItemsSource = MainPage.user.dArray.ToList();    

      } 

      private void item_Select(object sender, SelectionChangedEventArgs e) 
      { 
       var selctedItem = lstDevice.SelectedItem as (Your list box's itmsource) 
      } 
+0

錯誤:成員「SelectionChange」未被識別或無法訪問。 – Kevan