WPF TreeViewItem
-
21-09-2019 - |
سؤال
أقوم بإنشاء ملف 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
.