让弹出窗口显示在水平对齐 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;
我怎样才能拥有一个水平居中对齐的弹出窗口,但仍将位置保持在父项下方,如下所示:
我有什么:
代码:
<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;