Q064. 左クリックで ContextMenu を表示するには?

A. Blend SDKChangePropertyAction ビヘイビアーを使用します。

以下サンプルです。先日のエントリXAML を改造し、TextBox を Button に変更しています。Button を左クリックすると ContextMenu を表示します。

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
  xmlns:local="clr-namespace:ContextMenuSample"
  xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
  xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
  x:Name="window" x:Class="MainWindow"
  Title="MainWindow" Height="100" Width="180">

  <Window.DataContext>
    <local:MainWindowViewModel />
  </Window.DataContext>
  <Grid>
    <Button Margin="0,20" Content="{Binding MessageText}" x:Name="Button1">
      <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
          <ei:ChangePropertyAction TargetObject="{Binding ContextMenu, ElementName=Button1}" 
            PropertyName="IsOpen" Value="True"/>
          <ei:ChangePropertyAction TargetObject="{Binding ContextMenu, ElementName=Button1}" 
            PropertyName="PlacementTarget" 
            Value="{Binding ElementName=Button1, Mode=OneWay}"/>
        </i:EventTrigger>
      </i:Interaction.Triggers>
      <Button.ContextMenu>
        <ContextMenu >
          <MenuItem Header="おはよう"   Command="{Binding MorningCommand}"/>
          <MenuItem Header="こんにちは" Command="{Binding HelloCommand}"/>
          <Separator />
          <MenuItem Header="こんばんは" Command="{Binding EveningCommand}" />
        </ContextMenu>
      </Button.ContextMenu>
    </Button>
  </Grid>
</Window>


WPF FAQ の目次に戻る