C# 单击按钮时将属性设置为值的纯Xaml解决方案?

C# 单击按钮时将属性设置为值的纯Xaml解决方案?,c#,wpf,C#,Wpf,在我的应用程序中,我希望当用户左键单击按钮时,按钮的上下文菜单出现。我可以通过为button的click事件创建一个事件处理程序,然后将其上下文菜单的IsOpen属性设置为true来实现这一点,但我想知道是否有一个纯xaml解决方案可以实现同样的功能。有什么想法吗 谢谢 您可以使用事件触发器使其出现,但需要另一个触发器才能使其消失。但是,我想不出任何现有属性的组合会给您带来任何有用的东西。我会通过视图模型类处理类似的事情 public Visibility ContextMenuVisibili

在我的应用程序中,我希望当用户左键单击按钮时,按钮的上下文菜单出现。我可以通过为button的click事件创建一个事件处理程序,然后将其上下文菜单的IsOpen属性设置为true来实现这一点,但我想知道是否有一个纯xaml解决方案可以实现同样的功能。有什么想法吗


谢谢

您可以使用事件触发器使其出现,但需要另一个触发器才能使其消失。但是,我想不出任何现有属性的组合会给您带来任何有用的东西。

我会通过视图模型类处理类似的事情

public Visibility ContextMenuVisibility
{
    get { return (this.ShowContextMenu) ? Visibility.Visible : Visibility.Collapsed; }
}

public bool ShowContextMenu { get; set; }
处理那些介于视图和模型之间的动态事件正是视图模型层的设计目的


哦,我在为自己不是一个纯粹的XAML解决方案而自责。只需提供onCheckChanged事件的另一个替代方案。

您可以为按钮创建新模板,然后在模板的可视化树中提供上下文菜单。大概是这样的:

<Style TargetType="{x:Type Button}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Border>
          <ContentPresenter HorizontalAlignment="Center"
                            VerticalAlignment="Center"/>
          <Border.ContextMenu>
            <ContextMenu Name="contextMenu">
              <MenuItem Header="Here's a menu."/>
            </ContextMenu>
          </Border.ContextMenu>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
然后,您可以使用按钮的IsPressed属性进行触发,并使用setter将其连接起来,并将contextMenu作为TargetName


我真正的问题是,你用这个干什么?在左键单击时打开上下文菜单本身就是有缺陷的,因为上下文菜单本质上是在单击任何其他元素时关闭的。这意味着,即使设置正确,该触发器也会立即打开和关闭关联菜单。我很好奇为什么你需要这种行为;也许有比使用上下文菜单更好的方法。

他从未说过他在使用MVVM。你不能自己投反对票,但我会为你投,因为这对他毫无帮助我希望构建类似于Office或IE的东西,单击工具栏上的按钮时,会在下面显示一个菜单。在我的场景中,菜单中的每个菜单项都是可检查的,因此用户可以快速地从工具栏打开/关闭内容。啊。对于这种情况,上下文菜单肯定不是您想要的。您应该做的是创建自己独特类型的按钮,该按钮具有自己的项目集合。然后,这些项目将显示在下拉式菜单中。重新模板化组合框控件可能是一个很好的起点。