Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

DoubleClick Event on dynamicly generated ListBoxItem

$
0
0

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>


Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>