带上下文菜单的WPF按钮,如何将上下文菜单宽度绑定到按钮的宽度?

Jon*_*son 4 wpf binding

我有一个简单的按钮,我希望上下文菜单的宽度与按钮的宽度相同(我左键单击按钮打开按钮正下方的上下文菜单).

<Button x:Name="btn" Content="Push Me">
    <Button.ContextMenu>
        <ContextMenu x:Name="cm">
            <MenuItem Header="One" />
            <MenuItem Header="Two" />
            <MenuItem Header="Three" />
        </ContextMenu>
    </Button.ContextMenu>
</Button>
Run Code Online (Sandbox Code Playgroud)

我已在上下文菜单本身尝试了以下绑定,但它不起作用

<ContextMenu x:Name="cm" Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Button}}, Path=ActualWidth}">
Run Code Online (Sandbox Code Playgroud)

但是,我已经能够在代码中使用它了

btn.LayoutUpdated += (s, e) => cm.Width = btn.ActualWidth;
Run Code Online (Sandbox Code Playgroud)

我的问题是......是否存在可以获得此功能的xaml绑定?

Fre*_*lad 5

ContextMenu有一个属性调用PlacementTarget,在这种情况下将是Button你可以尝试在路径中使用Binding

<ContextMenu x:Name="cm"
             Width="{Binding RelativeSource={RelativeSource Self},
                             Path=PlacementTarget.ActualWidth}">
Run Code Online (Sandbox Code Playgroud)