buttonを左クリックして、コンテキストメニューを表示する方法

そもそも、コンテキストメニューとは、右クリックで表示されるメニューのことです。
それを左クリックでも表示してみようという、至極簡単なお話。

普通に、コンテキストメニューとして実装するなら、次のようなソースです。(ソースが見にくくなるので、細かい修飾部分は削っています)

//XAML

<Button>
  <StackPanel>
    <materialDesign:PackIcon Kind="LanDisconnect"/>
    <Label Name="ConMsg" Padding="0">サーバーに接続中...</Label>
  </StackPanel>
  <Button.ContextMenu>
    <ContextMenu>
      <MenuItem Header="切断"/>
      <MenuItem Header="再接続"/>
    </ContextMenu>
  </Button.ContextMenu>
</Button>

とまあ、細かいところを除けばこれで実装できるんですが、いかんせんボタンを押したときの動作としてメニューを開きたいので、次のようにしました。いと安し。

//XAML 修正後

<Button Click="statusButtonLeftClick">
  <StackPanel>
    <materialDesign:PackIcon Kind="LanDisconnect"/>
    <Label Name="ConMsg" Padding="0">サーバーに接続中...</Label>
  </StackPanel>
  <Button.ContextMenu>
    <ContextMenu Name="statusButtonContextmenu">
      <MenuItem Header="切断"/>
      <MenuItem Header="再接続"/>
    </ContextMenu>
  </Button.ContextMenu>
</Button>
//CS

private void statusButtonLeftClick(object sender, EventArgs e)
{
  statusButtonContextmenu.IsOpen = true;
}

たったこれだけ。

小難しいこともなにもいりません。ただただ、IsOpenをtrueにしてあげれば、コンテキストメニューが左クリックでも開くようになります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です