سؤال

لدي عنصر TreeView على هذا النحو في TreeView سيكون له قائمة مرتبطة به:

        <TreeViewItem Name="tviOffline" Foreground="Red" FontWeight="Bold"
                      Header="Offline">
            <TreeViewItem.ItemTemplate>
                <DataTemplate DataType="{x:Type local:Buddy}">
                    <StackPanel>
                        <TextBlock Text="{Binding Nick}" FontSize="10" Foreground="#8CFFD528" />
                    </StackPanel>
                </DataTemplate>
            </TreeViewItem.ItemTemplate>
        </TreeViewItem>

لا يمكنني معرفة كيفية الحصول على كل من أطفالها للحصول على حدث نقر مزدوج.

أي مساعدة موضع تقدير. شكرا جزيلا.

هل كانت مفيدة؟

المحلول

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
        ...

نصائح أخرى

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="OnItemMouseDoubleClick" />
        ...

وبعد ذلك ، يجب كتابة المعالج على النحو التالي لمنع النقر المزدوج من إطلاق النار على TreeViewItems المتتالية:

   private void OnItemMouseDoubleClick(object sender, MouseButtonEventArgs args)
    {
        if (sender is TreeViewItem)
        {
            if (!((TreeViewItem)sender).IsSelected)
            {
                return;
            }
        }

        .... do stuff.

    }

بفضل Aurelien Ribon للحصول على 90 ٪ من الطريق هناك. يبدو أن مشكلة النقر المزدوج معروفة في منشورات أخرى على Exchange. مجرد دمج كلا الحللين في إجابة واحدة.

هذه هي الطريقة الوحيدة التي تمكنت من جعلها تعمل في جميع الحالات:

    void MyTreeView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var clickedItem = TryGetClickedItem(myTreeView, e);
        if (clickedItem == null)
            return;

        e.Handled = true; // to cancel expanded/collapsed toggle
        DoStuff(clickedItem);
    }

    TreeViewItem TryGetClickedItem(TreeView treeView, MouseButtonEventArgs e)
    {
        var hit = e.OriginalSource as DependencyObject;
        while (hit != null && !(hit is TreeViewItem))
            hit = VisualTreeHelper.GetParent(hit);

        return hit as TreeViewItem;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top