Появится всплывающее окно под родительским элементом с горизонтальным выравниванием wpf - PullRequest
0 голосов
/ 05 мая 2020

Как я могу иметь всплывающее окно с горизонтальным выравниванием по центру, но при этом размещать его ниже родительского элемента, например:

Что у меня есть:

enter image description here

Код:

<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>

Что я хочу:

enter image description here

1 Ответ

1 голос
/ 05 мая 2020

Вы можете использовать свойство HorizontalOffset всплывающего окна. Если вы знаете ширину переключателя, вы можете установить число в XAML:

 <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=button}" 
       HorizontalOffset="-100"
       IsOpen="{Binding IsChecked, ElementName=button}" StaysOpen="False">

Если вам нужен более общий c подход, в коде позади вы можете вычислить точное смещение, которое необходимо :

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