XAML中的中心弹出窗口

我使用以下代码创建了一个Popup,但我无法弄清楚如何将它居中
我试图在运行时自动更改边距,但我无法弄清楚如何做到这一点,但有人知道如何将弹出窗口居中吗?
它没有标准维度原因我需要全球化我的程序

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Name="MainGrid">
   <Popup x:Uid="LoginPopup" IsOpen="True" Name="LoginPopup">
      <Grid>
         <Grid.RowDeFinitions>
            <RowDeFinition Height="Auto" />
            <RowDeFinition Height="Auto" />
            <RowDeFinition Height="Auto"/>
            <RowDeFinition Height="Auto" />
         </Grid.RowDeFinitions>
         <Grid.ColumnDeFinitions>
            <ColumnDeFinition Width="Auto" />
            <ColumnDeFinition Width="*" />
         </Grid.ColumnDeFinitions>
         <TextBlock Margin="10" Grid.Column="0" Grid.Row="0" Text="App Name" Grid.ColumnSpan="2" Style="{StaticResource HeaderTextStyle}" />
         <TextBlock Margin="10" Grid.Column="0" Grid.Row="1" Text="Username" Style="{StaticResource ResourceKey=SubheaderTextStyle}" />
         <TextBox Margin="10" Grid.Column="1" Grid.Row="1" Name="InputUsername" />
         <TextBlock Margin="10" Grid.Column="0" Grid.Row="2" Text="Password" Style="{StaticResource ResourceKey=SubheaderTextStyle}" />
         <PasswordBox Margin="10" Grid.Column="1" Grid.Row="2" Name="InputPassword" />
         <StackPanel  Margin="10" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" Orientation="Horizontal">
            <Button Name="Login"  x:Uid="LoginPopupLogin"  />
            <Button Name="Cancel" x:Uid="LoginPopupCancel" />
         </StackPanel>
      </Grid>
   </Popup>
</Grid>

UPDATE

我尝试了下面的user1603313的答案,但它没有做到这一点,因为它说弹出窗口内的网格大小是NaN.
我也尝试将方法移动到网格中,但它也没有做到这一点
我正在谈论的方法是在网格正确更新的情况下

private void LoginPopup_Loaded_1(object sender,RoutedEventArgs e)
{
   LoginPopup.HorizontalOffset = (Window.Current.Bounds.Width - gdChild.ActualWidth) / 2;
   LoginPopup.VerticalOffset = (Window.Current.Bounds.Height - gdChild.ActualHeight) / 2;
}

解决方法

这是解决问题的方法.我正在重写xaml代码以及修改,你可以在代码后找到解释.

<Popup x:Uid="LoginPopup" IsOpen="True" Name="LoginPopup" Loaded="LoginPopup_Loaded_1">
        <Grid Background="Red" x:Name="gdChild" Height="Auto" Width="Auto">
            <Grid.RowDeFinitions>
                <RowDeFinition Height="Auto" />
                <RowDeFinition Height="Auto" />
                <RowDeFinition Height="Auto"/>
                <RowDeFinition Height="Auto" />
            </Grid.RowDeFinitions>
            <Grid.ColumnDeFinitions>
                <ColumnDeFinition Width="Auto" />
                <ColumnDeFinition Width="*" />
            </Grid.ColumnDeFinitions>
            <TextBlock Margin="10" Grid.Column="0" Grid.Row="0" Text="App Name" Grid.ColumnSpan="2" Style="{StaticResource HeaderTextStyle}" />
            <TextBlock Margin="10" Grid.Column="0" Grid.Row="1" Text="Username" Style="{StaticResource ResourceKey=SubheaderTextStyle}" />
            <TextBox Margin="10" Grid.Column="1" Grid.Row="1" Name="InputUsername" />
            <TextBlock Margin="10" Grid.Column="0" Grid.Row="2" Text="Password" Style="{StaticResource ResourceKey=SubheaderTextStyle}" />
            <PasswordBox Margin="10" Grid.Column="1" Grid.Row="2" Name="InputPassword" />
            <StackPanel  Margin="10" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" Orientation="Horizontal">
                <Button Name="Login"  x:Uid="LoginPopupLogin"  />
                <Button Name="Cancel" x:Uid="LoginPopupCancel" />
            </StackPanel>
        </Grid>
    </Popup>

在这里,我将一个事件Loaded =“LoginPopup_Loaded_1”添加到弹出窗口的xaml中

这是C#中的事件代码

private void LoginPopup_Loaded_1(object sender,RoutedEventArgs e)
    {
        LoginPopup.HorizontalOffset = (Window.Current.Bounds.Width - gdChild.ActualWidth) / 2;
        LoginPopup.VerticalOffset = (Window.Current.Bounds.Height - gdChild.ActualHeight) / 2;
    }

说明:

Horizo​​ntalOffset获取应用程序窗口左侧与弹出窗口左侧之间的距离.

类似地,垂直偏移量获得窗口顶部和弹出窗口顶部之间的距离

因为我们必须将它对齐,所以我们必须从应用程序窗口的宽度和高度中减去弹出窗口的宽度和高度的一半(弹出窗口的中心是弹出窗口距离它的顶部和左边界的一半) )

代码是用Loaded =“LoginPopup_Loaded_1”事件编写的,因为当在应用程序窗口中呈现元素时会调用此事件并且因为它是所有子元素的容器Grid而被占用Grid.

我希望很清楚:)

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...