Кто-нибудь знает, как я могу разместить Popup Control в Центре экрана?
Спасибо!
Кто-нибудь знает, как я могу разместить Popup Control в Центре экрана?
Спасибо!
Используйте свойства Placement и PlacementTarget, чтобы расположить его относительно любой панели в корне окна. Поэтому, если у меня есть Grid
, StackPanel
и т.д., Который содержит все остальные "вещи" в окне под названием MainPanel
, я делаю что-то вроде:
<Popup
PlacementTarget="{Binding ElementName=MainPanel}"
Placement="Center"
>
Во-первых, вы можете использовать статические свойства 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;
Использование сетки в качестве контейнера, и выравнивание будет отлично работать для вас:
<Popup IsOpen="True">
<Grid Name="canvasMain">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
...
</StackPanel>
</Grid>
</Popup>
Ни один из этих ответов не работал у меня частично, потому что у меня нет размера Popup. В итоге я сделал это в коде следующим образом:
var popup = new Popup
{
Child = new YourUIControlHere(),
Placement = PlacementMode.Center,
PlacementRectangle = new Rect(new Size(
SystemParameters.FullPrimaryScreenWidth,
SystemParameters.FullPrimaryScreenHeight))
};
Это можно легко расширить до XAML, добавив привязку для размера экрана.
Очевидным преимуществом является использование текущего экрана для поддержки нескольких мониторов. Однако получение текущих размеров окна значительно больше.