【问题标题】:Creating ContextMenu in XAML, and adding it to an Item in Code?在 XAML 中创建 ContextMenu,并将其添加到代码中的项目?
【发布时间】:2011-04-16 19:13:05
【问题描述】:

我正在使用 Silverlight Toolkit 中的 ContextMenu 控件,我想在 xaml 中定义上下文菜单,并将其“添加”到我在代码中创建的控件中。

我正在使用 Telerik Outlook Radbar,它包含 Telerik RadTreeView。我目前正在通过 Converter 类在代码中创建 RadTreeView,但我希望每个 treeviewitem 都有一个右键菜单。

有没有办法将 ContextMenu 定义为 DataTemplate,并将 RadTreeView 设置为使用它?

这是我所拥有的,但它并没有像我预期的那样工作(我得到默认的silverlight右键菜单)

XAML

<DataTemplate x:Key="TreeViewItemTemplate">
    <controlsToolkit:ContextMenuService.ContextMenu>
       <controlsToolkit:ContextMenu>
          <controlsToolkit:MenuItem Header="New Folder" 
                                    Click="NewFolderMenu_Click"/>
       </controlsToolkit:ContextMenu>
    </controlsToolkit:ContextMenuService.ContextMenu>
</DataTemplate>

CS

var t = new RadTreeView();

t.IsLineEnabled = true;
t.IsDragDropEnabled = true;
t.ItemTemplate = (DataTemplate) MailboxView.MailboxResources["TreeViewItemTemplate"];

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    ContextMenu 是 ContextMenuService 类的附加属性,菜单将应用于附加该属性的元素。在您的示例中,它附加到空数据模板,UI 中没有任何内容表示该模板,因此您无需右键单击以获取菜单。将此属性附加到可见的东西将解决问题。

    【讨论】:

    • 感谢您的回答。如何将 XAML 中的 ContextMenu 附加到在 C# 中生成的一组项目?我必须在代码中这样做吗?
    • 您需要为一个项目定义一个模板(您可以在已有的 DataTemplate 中添加一些可见的内容),然后将 ContextMenuService.ContextMenu 属性附加到模板的根元素。此外,为了让 TreeView 看起来像一棵树,您应该使用 HierarchicalDataTemplate 而不是 DataTemplate。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多