قائمة السياق على TreeViewItem استدعاءات الأسلوب TreeViewItem على ذلك؟
-
21-08-2019 - |
سؤال
ولدي الإعداد TreeView
بحيث يكون لكل TreeViewItem
ديه بزر الماوس الأيمن فوق قائمة السياق تطبيقها باعتبارها Style
. شيء من هذا القبيل:
<Grid.Resources>
<ContextMenu x:Key="contextMenu">
<MenuItem Header="Save" IsEnabled="{Binding Path=Saveable}"/>
<MenuItem Header="Copy" IsEnabled="{Binding Path=Copyable}"/>
<MenuItem Header="Remove" IsEnabled="{Binding Path=Removeable}"/>
</ContextMenu>
<Style TargetType="TreeViewItem">
<Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
</Style>
</Grid.Resources>
وSaveable، Copyable وRemoveable ووالخصائص التي تأتي من الكائن الذي يتم استخدامه كما TreeViewItem
.
وماذا أنا أبحث عن وعندما ينقر المستخدم على MenuItem
، فإنه انقر على الطريقة المناسبة للكائن المحدد. حتى النقر على MenuItem
"حفظ" سيدعو object.Save()
"نسخ" يدعو object.Copy()
، الخ. ولكن لست متأكدا ما قد تبدو بناء الجملة مثل، أو ما إذا كانت الفكرة هي مقبولة في الواقع من حيث الأسلوب WPF نموذجي. أعرف أنني أستطيع أن مجرد إنشاء معالج الحدث الجديد في إطار شامل، ولكن كنت تفضل العنصر المحدد نفسها للتعامل مع الحدث.
والأفكار؟
وشكرا!
المحلول
ولسوء الحظ، لا أعتقد أن هناك طريقة تلقائية للقيام بذلك. فإن الخيار الأقرب أن يكون لإعداد RoutedUICommand
لكل عنصر في ContextMenu
، ثم قم بإنشاء CommandBinding
لكل في صفك. إذا كنت تريد تلك للذهاب إلى TreeViewItem
، ستحتاج على الارجح إلى فئة فرعية TreeViewItem
وإعداد CommandBindings
هناك.
والخيار الوحيد الذي فكرت قد عمل سيكون إضافة EventSetter
لMenuItem.Click
إلى النمط TreeViewItem
. ومع ذلك، لم يفلح ذلك - ربما لأن العناصر الموجودة في ContextMenu
هي في شجرة بصرية مختلفة من TreeViewItems