Quantcast
Viewing all articles
Browse latest Browse all 18858

DoubleClick Event on dynamicly generated ListBoxItem

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>