gpt4 book ai didi

xaml - XAML 中的中心弹出窗口

转载 作者:行者123 更新时间:2023-12-04 17:23:57 26 4
gpt4 key购买 nike

我使用以下代码创建了一个弹出窗口,但我不知道如何将它居中
我试图在运行时自动更改边距,但我不知道该怎么做,但是有人知道如何将弹出窗口居中吗?
它没有标准维度,因为我需要全局化我的程序

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

更新

我尝试在下面使用 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。

我希望我清楚:)

关于xaml - XAML 中的中心弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com