C# 在UWP中显示主窗口的次窗口中心

C# 在UWP中显示主窗口的次窗口中心,c#,uwp,multi-window,C#,Uwp,Multi Window,我开始在UWP中使用多个窗口,需要在屏幕中心或至少在父窗口中心显示辅助窗口 我发现除了Window.Current.Boundsproperty之外,与如何指定在屏幕上显示其他窗口的位置无关 下面是我用来创建其他窗口的方法的简化版本。方法签名是:CreateFrameWindow(大小、类型pageType、对象参数) 只要辅助窗口有足够的空间根据其在屏幕上的当前位置调整大小,则TryResizeView就可以正常工作。我想将大小调整到最大可用大小(窗口最大化时的大小),并将其放置在屏幕中央。如

我开始在UWP中使用多个窗口,需要在屏幕中心或至少在父窗口中心显示辅助窗口

我发现除了
Window.Current.Bounds
property之外,与如何指定在屏幕上显示其他窗口的位置无关

下面是我用来创建其他窗口的方法的简化版本。方法签名是:
CreateFrameWindow(大小、类型pageType、对象参数)

只要辅助窗口有足够的空间根据其在屏幕上的当前位置调整大小,则
TryResizeView
就可以正常工作。我想将大小调整到最大可用大小(窗口最大化时的大小),并将其放置在屏幕中央。如果不可能,可以将其放置在父窗口或主窗口的中心

在UWP中显示主窗口的次窗口中心

CoreApplicationView
不提供手动设置视图位置的api。根据您的要求,请尝试使用存档此功能。并且
AppWindow
具有将窗口定位在指定显示区域中指定偏移处的方法。有关更多信息,请参考官方场景5

更新

如果要使新窗口显示在中间,则需要在之前知道窗口大小,并计算RequestMoveRelativeToDisplayRegion方法的X Y值

X = (1920-W)/2  //1920 is Horizontal Resolution W is the new window's width 
Y = (1080-H)/2  //1080 is Vertical Resolution  H is the new window's height
有关获取当前显示分辨率的信息,请参阅本案例


对于AppWindow,我正在使用

//设置自定义窗口大小
WindowManagement.Preview.WindowManagementPreview.SetPreferredMinSize(appWindow,新大小(500500));
appWindow.RequestSize(新大小(500500));
DisplayRegion DisplayRegion=ApplicationView.GetForCurrentView().GetDisplayRegions()[0];
double displayRegionWidth=displayRegion.WorkAreaSize.Width;
double displayRegionHeight=displayRegion.WorkAreaSize.Height;
int水平偏移=(int)(displayRegionWidth-520)//新窗户的宽度为500+20,以容纳填充物
int垂直偏移=(int)(显示区域高度-500)//新窗户有500米高

appWindow.RequestMoveRelativeToDisplayRegion(displayRegion,新点(水平偏移/2,垂直偏移/2))我已成功编译AppWindow解决方案。必须将平台目标版本设置为1903。但是,在运行时,我得到一个异常,状态为
System.TypeLoadException:“请求的Windows运行时类型”Windows.UI.WindowManagement.AppWindow“未注册”。
很可能是因为我当前的Windows版本是1809。是的,您是正确的,目前它仅在1903年起作用。如果您想使用它,请将您的操作系统更新到最新版本刚刚将Windows更新到1903,并且可以确认它是否按预期工作。更新是自己启动的。我不确定更新是否是在安装SDK for 1903后触发的,但可以按照此处提供的说明手动安装:好的,您的答案代表了解决我问题的破冰者。问题与移动新窗口略有不同。窗口必须显示在中间,并具有所需的大小。这是一个分为两步的过程,可能并不简单,需要进行位置计算。是的,如果你想让新窗口显示在中间,你需要事先知道你的窗口大小,然后计算RequestMoveRelativeToDisplayRegion方法的X Y值。X=(1920-W)/2,Y=(1080-H)/2。
X = (1920-W)/2  //1920 is Horizontal Resolution W is the new window's width 
Y = (1080-H)/2  //1080 is Vertical Resolution  H is the new window's height
var bounds = ApplicationView.GetForCurrentView().VisibleBounds;
var scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
var size = new Size(bounds.Width*scaleFactor, bounds.Height*scaleFactor);