2014-12-20 77 views
0

我是WPF.I的新手,我想獲取與其UserList_SelectionChanged事件上選定的特定Listitem相對應的TextBlock控件的文本。WPF Listbox控件

<ListView Height="188" Canvas.Left="11" Canvas.Top="167" Width="252"> 

      <ListBox Name="UserList" Width="224" BorderThickness="0" SelectionChanged="UserList_SelectionChanged_1"> 
        <ListBoxItem> 
         <StackPanel Orientation="Horizontal"> 
          <Image Source="Status-user-online-icon.png" Height="19" Width="18" /> 
          <TextBlock FontSize="14" FontStretch="Expanded" Width="98">User1</TextBlock> 
          <Line Stroke="red" X1="0" Y1="25" X2="{Binding ElementName=root, Path=Width}" Y2="25" Opacity="0.22" /> 
         </StackPanel> 

        </ListBoxItem> 
        <ListBoxItem> 
         <StackPanel Orientation="Horizontal"> 
          <Image Source="Status-user-online-icon.png" Height="19" Width="18" /> 
          <TextBlock FontSize="14" FontStretch="Expanded" Width="98">User2</TextBlock> 
          <Line Stroke="red" X1="0" Y1="25" X2="{Binding ElementName=root, Path=Width}" Y2="25" /> 
         </StackPanel> 

        </ListBoxItem> 
       </ListBox> 

    </ListView> 

任何幫助,將不勝感激。

回答

1

我看不出把ListBox放在ListView裏面,反思一下。在這裏,你有你的TextBlock

((StackPanel)((ListBoxItem)UserList.SelectedItem).Content).Children.OfType<TextBlock>().FirstOrDefault(); 
2

請通過下面的例子

XAML中 -

<Grid> 
    <ListView Name="lstView" Margin="10" SelectionChanged="lstView_SelectionChanged"> 
    <ListViewItem> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock>One</TextBlock> 
     </StackPanel> 
    </ListViewItem> 
    <ListViewItem> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock>Two</TextBlock> 
     </StackPanel> 
    </ListViewItem> 
    <ListViewItem> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock>Three</TextBlock> 
     </StackPanel> 
    </ListViewItem> 
    </ListView> 
</Grid> 

在後面的代碼

private void lstView_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    object selectedEntry = lstView.SelectedItem; 
    ListBoxItem lbi = (ListBoxIte)lstView.SelectedItem; 
    var stackPanel = lbi.Content as StackPanel; 

    foreach (var child in stackPanel.Children) 
    { 
     MessageBox.Show((child as TextBlock).Text); 
    }  
} 
+0

爲什麼投lstView.SelectedItem到對象時,它已經類型對象?而不是ListBoxItem lbi = this.lstView.ItemContainerGenerator.ContainerFromItem(selectedEntry)作爲ListBoxItem;只是做:ListBoxItem lbi =(ListBoxItem)lstView.SelectedItem – rauland

+1

正確在這種情況下鑄造不是必需的。 – Gun