Hello.
I've got an ListBox that has an DataTemplate and that gets automatically filled. It works very fine but I want to get the text of a TextBlock that is inside the DateTemplate of the clicked ListBoxItem. Sometimes there is an error, sometimes not. Please tell me about my fault:
Code:
public void DoubleClickHandler(object sender, MouseEventArgs e) { if (tabControl.Items.Count < 1) { System.Windows.MessageBox.Show("Keine Fehler vorhanden!"); return; } // var item = sender as ListBoxItem; ListBoxItem lbItem = (ListBoxItem)(lbErrors.ItemContainerGenerator.ContainerFromItem(lbErrors.Items.CurrentItem)); ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(lbItem); DataTemplate myDataTemplate = myContentPresenter.ContentTemplate; TextBlock myTextBlock = (TextBlock)myDataTemplate.FindName("tbID", myContentPresenter); int j = Convert.ToInt32(myTextBlock.Text); int i = errLines[tabControl.SelectedIndex][j]; int k = editor.Document.GetOffset(i, 1); DocumentLine line = editor.Document.GetLineByOffset(k); try { editor.Select(line.Offset, line.Length); editor.ScrollToLine(i); } catch { } } private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject { try { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is childItem) return (childItem)child; else { childItem childOfChild = FindVisualChild<childItem>(child); if (childOfChild != null) return childOfChild; } } } catch { } return null; }
ListBox:
<ListBox ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="False" Name="lbErrors" IsSynchronizedWithCurrentItem="True" Height="auto" ItemsSource="{Binding}"><ListBox.ItemContainerStyle><Style TargetType="ListBoxItem"><EventSetter Event="MouseDoubleClick" Handler="DoubleClickHandler" /></Style></ListBox.ItemContainerStyle><ListBox.ItemTemplate><DataTemplate><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="auto" /><ColumnDefinition Width="auto" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><TextBlock Text="{Binding id}" Name="tbID" Margin="5" FontWeight="Bold" FontSize="12" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" /><Image Height="25" Width="25" Name="tbIMG" Source="{Binding img_src}" HorizontalAlignment="Center" Grid.Column="1" /><StackPanel Margin="10, 0, 0, 0" Grid.Column="2" Orientation="Vertical" ><TextBlock FontWeight="Bold" FontSize="11" Text="{Binding errorOriginal}"/><TextBlock FontSize="10" Text="{Binding errorGerman}" /><!-- Margin="10, 0, 0, 0" --></StackPanel></Grid></DataTemplate></ListBox.ItemTemplate></ListBox>