让弹出窗口显示在水平对齐 wpf 的父级下方

Have popup show up below parent with horizontal alignment wpf

我怎样才能拥有一个水平居中对齐的弹出窗口,但仍将位置保持在父项下方,如下所示:

我有什么:

代码:

<ToggleButton Name="button" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Center">
            <ToggleButton.Template>
                <ControlTemplate TargetType="ToggleButton">
                    <TextBlock>settings</TextBlock>
                    <!--<materialDesign:PackIcon Kind="PackageVariantClosed" Foreground="Black" Height="24" Width="24"/>-->
                </ControlTemplate>
            </ToggleButton.Template>
        </ToggleButton>
        <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=button}" IsOpen="{Binding IsChecked, ElementName=button}" StaysOpen="False">
            <Border Background="#222" Height="150" Width="250">
                <TextBlock>I'm the popup</TextBlock>
            </Border>
        </Popup>

我想要的:

您可以使用弹窗的HorizontalOffset 属性。如果您知道切换按钮的宽度,您可以在 XAML:

中设置一个数字
 <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=button}" 
       HorizontalOffset="-100"
       IsOpen="{Binding IsChecked, ElementName=button}" StaysOpen="False">

如果您想要更通用的方法,您可以在后面的代码中计算出所需的确切偏移量:

 popup.HorizontalOffset = -125 + button.ActualWidth / 2;