قائمة السياق على TreeViewItem استدعاءات الأسلوب TreeViewItem على ذلك؟

StackOverflow https://stackoverflow.com/questions/858843

سؤال

ولدي الإعداد 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

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