2011-04-16 42 views
0

我正在使用Silverlight工具包中的ContextMenu控件,我想定义xaml中的contextmenu,并将其“添加”到我在代码中创建的控件中。在XAML中创建ContextMenu,并将其添加到Code中的Item中?

我正在使用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"]; 

回答

2

ContextMenu是ContextMenuService类的附加属性,并且将应用菜单t o该属性附加到的元素。在你的例子中,它被附加到空的数据模板上,这个模板在UI中没有任何东西,所以你没有什么可以右键点击来获得你的菜单。将该属性附加到可见的东西将解决问题。

+0

感谢您的回答。如何将XAML中的ContextMenu附加到在C#中生成的一组项目中?我必须在代码中执行此操作吗? – Alan 2011-04-17 17:05:43

+0

您需要为一个项目定义一个模板(您可以为已有的DataTemplate添加可见的内容),然后将ContextMenuService.ContextMenu属性附加到模板的根元素。另外,为了让TreeView看起来像树,你应该使用HierarchicalDataTemplate而不是DataTemplate。 – 2011-04-17 17:45:28

相关问题