【问题标题】:Generate context menu in WPF在 WPF 中生成上下文菜单
【发布时间】: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 中提到的TitleCommand 这两个属性?
  • 另外,你在哪里设置DataContext?
  • 命令是我自己的类型,这两个字段都有。 DataContext 是在应用主题期间设置的,它用于按钮(我可以看到其中加载了 ButtonTitle)

标签: c# wpf user-interface contextmenu


【解决方案1】:

尝试设置 DataContext…

<Button>
    <Button.ContextMenu >
        <ContextMenu DataContext="{Binding}" ItemsSource="{Binding Path=Commands}">
            <ContextMenu.ItemTemplate>
                <DataTemplate>
                    <MenuItem Header="{Binding Path=Title}" Command="{Binding Path=Command}" />
                </DataTemplate>
            </ContextMenu.ItemTemplate>
        </ContextMenu>
    </Button.ContextMenu>
</Button>

【讨论】:

  • 是的,我认为这会有所帮助,但是如何将此 {Binding} 附加到 Button 的 DataContext?我尝试了几种变体,但都没有帮助
  • 不确定你的意思……你不知道绑定是如何工作的?或者你不能将它附加到你的用户控件/窗口?还是简单的按钮? &lt;Button DataContext="{Binding Path=MyModel}"&gt;
猜你喜欢
  • 1970-01-01
  • 2010-10-26
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多