سؤال

أقوم بإنشاء ملف TreeView باستخدام الأسلوب التالي حلق من خلال مستند XML.

ولكن عند أي TreeViewItem تم تحديد جميع العقد في التسلسل الهرمي تحصل على مشغلات الحدث بدلاً من فقط المحدد TreeViewItem.

على سبيل المثال ، لنفترض أننا نختار حفيد العقدة. جميع العقد بما في ذلك الحفيد والطفل والوالدين تثير نفس الحدث.

وبعبارة أخرى ، نتوقع فقط أن يحفز الحفيد الحدث المرتبط به ، بينما يجب أن يتم استدعاء الحدث مرة واحدة فقط ، لكن ينتهي به الأمر إلى 3 مرات لجميع عقد التسلسل الهرمي للعنصر المحدد.

هنا هو الرمز:

TreeViewItem getTreeViewItemWithHeader(XmlNode node)
{
    TreeViewItem tvi = new TreeViewItem();
    tvi.Header = node.Name;//hdr;
    tvi.Tag = node.Attributes["Tag"].Value;
    tvi.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(tvi_PreviewMouseLeftButtonDown);
    tvi.Selected += new RoutedEventHandler(tvi_Selected);

    return tvi;

}

واسمحوا لي أن أعرف إذا كان لديك أي اقتراحات ، شكرا

ن

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

المحلول

هذا يعمل بشكل صحيح. ال PreviewMouseLeftButtonDown الحدث هو حدث موجه (في هذه الحالة تكون الاستراتيجية نفق). هذا يعني أن جذر الشجرة المرئية يحصل على الحدث أولاً ، ويعمل في طريقه حتى يصل إلى السيطرة التي أدت في الأصل إلى الحدث. ال MouseLeftButtonDown و Selected تم توجيه الأحداث أيضًا ، لكن استراتيجيتها تتدفق - وهذا يعني أن الحدث يعمل في طريقه إلى الشجرة المرئية ، بدءًا من التحكم الذي أثار الحدث.

إذا كنت تريد أن لا يتم إرسال حدث موجه ، فقم بتعيين Handled خاصية RoutedEventArgs مرت في true.

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