右クリックするとその場所に表示されるポップアップメニューが欲しい場合、ContextMenu を実装することで実現できます。
実装例は以下。
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ContextMenu x:Key="Menu1" FontSize="32">
<MenuItem Header="MenuItem1"
Click="MenuItem1_Click" />
<MenuItem Header="MenuItem2">
<MenuItem Header="MenuItem21"
Click="MenuItem21_Click" />
<MenuItem Header="MenuItem22"
Click="MenuItem22_Click" />
</MenuItem>
</ContextMenu>
</Window.Resources>
<StackPanel>
<Button Content="A"
ContextMenu="{StaticResource Menu1}" />
<Button Content="B"
ContextMenu="{StaticResource Menu1}" />
<Button Content="C"
ContextMenu="{StaticResource Menu1}" />
</StackPanel>
</Window>
上記は、複数のコントロールで同じメニューを使う、というのを前提にしたので、ContextMenu の定義は Resources に定義しています。
フォントやフォントサイズも変えられるようです。
また、上記の定義で右クリックすると ContextMenu が表示されますが、プログラムによってメニューを表示したいという場合は、たとえば以下のコードで実現できます。(ContextMenu の IsOpen を True にする)
' ボタンの ContextMenu を経由して表示
Private Sub ButtonA_Click(sender As Object, e As RoutedEventArgs)
Dim b = DirectCast(sender, Button)
b.ContextMenu.IsOpen = True
End Sub
' 直接 Resources を参照して表示
Private Sub ButtonB_Click(sender As Object, e As RoutedEventArgs)
Dim c = DirectCast(Me.Resources("Menu1"), ContextMenu)
c.IsOpen = True
End Sub