18
<Button Name="btnFoo" Content="Foo" >
    <Button.ContextMenu Placement="Bottom" PlacementTarget="btnFoo">
        <MenuItem Header="Bar" />
    </Button.ContextMenu>
</Button>

実行時エラー 'UIElement' タイプに public TypeConverter クラスがありません

私も試しました

<Button Name="btnFoo" Content="Foo" >
    <Button.ContextMenu Placement="Bottom" PlacementTarget="{Binding ElementName=btnFoo}">
        <MenuItem Header="Bar" />
    </Button.ContextMenu>
</Button>

ボタンではなく、画面の左上隅に ContextMenu を配置します。

4

3 に答える 3

26

ContextMenuService.Placementのドキュメントのコメントに記載されているように、ボタンに ContextMenuService.Placement 添付プロパティを設定する必要があります。

<Button Name="btnFoo" Content="Foo" ContextMenuService.Placement="Bottom">
    <Button.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Bar" />
        </ContextMenu>
    </Button.ContextMenu>
</Button>
于 2010-06-18T16:16:43.497 に答える
4

これを試しましたか:

<Button Name="btnFoo" Content="Foo">
    <Button.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Bar" />
        </ContextMenu>
    </Button.ContextMenu>
</Button>

これにより、(ボタン上で)マウスを右クリックした場所でContextMenuが開きます。どちらがあなたの希望する場所だと思いますか?

---編集---その場合はこれを使用してください:

<Button Name="btnFoo" Content="Foo" ContextMenuOpening="ContextMenu_ContextMenuOpening">
    <Button.ContextMenu>
        <ContextMenu Placement="Bottom">
            <MenuItem Header="Bar" />
        </ContextMenu>
    </Button.ContextMenu>
</Button>

そして背後にあるコードで:

private void ContextMenu_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
    // Get the button and check for nulls
    Button button = sender as Button;
    if (button == null || button.ContextMenu == null)
        return;
    // Set the placement target of the ContextMenu to the button
    button.ContextMenu.PlacementTarget = button;
    // Open the ContextMenu
    button.ContextMenu.IsOpen = true;
    e.Handled = true;
}

このメソッドは、複数のボタンとContextMenuに再利用できます。

于 2009-08-13T14:26:18.640 に答える