Подтвердить что ты не робот

С#/WPF: установить всплывающее меню в центре экрана?

Кто-нибудь знает, как я могу разместить Popup Control в Центре экрана?

Спасибо!

4b9b3361

Ответ 1

Используйте свойства Placement и PlacementTarget, чтобы расположить его относительно любой панели в корне окна. Поэтому, если у меня есть Grid, StackPanel и т.д., Который содержит все остальные "вещи" в окне под названием MainPanel, я делаю что-то вроде:

<Popup
    PlacementTarget="{Binding ElementName=MainPanel}"
    Placement="Center"
>

Ответ 2

Во-первых, вы можете использовать статические свойства FullPrimaryScreenHeight, FullPrimaryScreenWidth класса System.Windows.SystemParameters, чтобы получить высоту и ширину экрана. Затем вы можете установить свойства Top и Left вашего всплывающего меню, используя ширину и высоту, прежде чем показывать его.

Что-то вроде.

double primScreenHeight = System.Windows.SystemParameters.FullPrimaryScreenHeight;
double primScreenWidth = System.Windows.SystemParameters.FullPrimaryScreenWidth;
_yourControl.Top = (primScreenHeight - _yourControl.Height) / 2;
_yourControl.Left = (primScreenWidth - _yourControl.Width) / 2;

Ответ 3

Использование сетки в качестве контейнера, и выравнивание будет отлично работать для вас:

<Popup IsOpen="True">
  <Grid Name="canvasMain">
    <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
      ...
    </StackPanel>
  </Grid>
</Popup>

Ответ 4

Ни один из этих ответов не работал у меня частично, потому что у меня нет размера Popup. В итоге я сделал это в коде следующим образом:

var popup = new Popup
{
    Child = new YourUIControlHere(),
    Placement = PlacementMode.Center,
    PlacementRectangle = new Rect(new Size(
        SystemParameters.FullPrimaryScreenWidth, 
        SystemParameters.FullPrimaryScreenHeight))
};

Это можно легко расширить до XAML, добавив привязку для размера экрана.

Очевидным преимуществом является использование текущего экрана для поддержки нескольких мониторов. Однако получение текущих размеров окна значительно больше.