【发布时间】:2013-07-05 13:58:11
【问题描述】:
这个问题被广泛讨论,但我还没有找到任何解决方案。
我正在根据数据模板生成(在 MyObject.Theme.xaml 中)一个项目。它必须是一个带有标题的按钮。当我点击这个按钮时,它必须显示查看根据集合生成的菜单。
但我看到的只是一个空的上下文菜单。好像没有看到Button的DataContext,也找不到,怎么传给ContextMenu。
代码如下:
<DataTemplate DataType="{x:Type fields:ButtonWithMenu}">
<Button Grid.Column="1" Content="{Binding Path=ButtonTitle}">
<!--- Show ContextMenu on left mouse clik)
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<!--- Try to load items from Button.DataContext.Commands -->
<Button.ContextMenu>
<ContextMenu ItemsSource="{Binding Path=Commands}">
<ContextMenu.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Path=Title}" Command="{Binding Path=Command}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</Button.ContextMenu>
</Button>
</DataTemplate>
【问题讨论】:
-
Commands的 DataType 是什么?它是否具有DataTemplate 中提到的Title和Command这两个属性? -
另外,你在哪里设置DataContext?
-
命令是我自己的类型,这两个字段都有。 DataContext 是在应用主题期间设置的,它用于按钮(我可以看到其中加载了 ButtonTitle)
标签: c# wpf user-interface contextmenu