XAML 弹出时,内容对话框未显示在弹出框上方,UWP中是否应将ConstrainToRootBounds设置为false?

jfgube3f  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(120)

我必须在单击按钮(打开弹出窗口)时打开一个弹出窗口,然后在单击按钮(打开内容对话框)时从弹出窗口中显示一个内容对话框。
如果我设置Popup.ShouldConstrainToRootBounds=false,内容对话框将显示在弹出窗口下方。我不明白发生了什么。我想在弹出窗口上方显示ContentDialog吗?
我的完整项目链接--〉Source Code
我的源代码:
XAML:

<Grid x:Name="Grid">
    <Button Click="Button_Click">Open Popup</Button>
</Grid>

C#:

private void Button_Click(object sender, RoutedEventArgs e)
{
        popup = new Popup {  Margin = new Thickness(200, 300, 0, 0),ShouldConstrainToRootBounds=false };
        Border border = new Border { Width = 400, Height = 300, Background = new SolidColorBrush(Colors.Green) };
        Button popupButton= new Button { Content = "Open Content Dialog", Width = 200, Height = 50 };
        border.Child = popupButton;
        popupButton.Click += PopupButton_Click;
        popup.Child = border;
        popup.IsOpen = true;
}

    private async void PopupButton_Click(object sender, RoutedEventArgs e)
    {
        ContentDialog contentDialog = new ContentDialog
        {
            Title = "ContentDialogOverPopup",
            Content = "Content Dialog",
            CloseButtonText = "Ok"
        };
        await contentDialog.ShowAsync();
    }
oxiaedzo

oxiaedzo1#

这是预期的。当您将ShouldConstrainToRootBounds属性设定为false时,快显会位于它自己的最上层HWND中。但ContentDialog仍会位于主XAML windows 控制代码(HWND)中。
当带有ShouldConstrainToRootBounds = false的弹出窗口第一次显示时,它会被放置在它自己的窗口中,并在该上下文中显示。这就是为什么PopUp总是在顶部的原因,因为它在另一个层中。如果没有必要,我建议您不要将此属性设置为false。
有关详细信息,可以查看Popup.ShouldConstrainToRootBounds属性。

相关问题