C # / WPF: поместить всплывающее управление в центре экрана? - PullRequest
20 голосов
/ 19 ноября 2009

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

Спасибо!

Ответы [ 4 ]

27 голосов
/ 19 ноября 2009

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

<Popup
    PlacementTarget="{Binding ElementName=MainPanel}"
    Placement="Center"
>
3 голосов
/ 19 ноября 2009

Во-первых, вы можете использовать статические свойства 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;
2 голосов
/ 17 июля 2016

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

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

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

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

2 голосов
/ 26 января 2011

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

<Popup IsOpen="True">
  <Grid Name="canvasMain">
    <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
      ...
    </StackPanel>
  </Grid>
</Popup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...