MatrixRonny
MatrixRonny

Reputation: 801

Show secondary window center of main window in UWP

I started using multiple windows in UWP and need to display secondary windows center of screen or at least center of parent window.

I found nothing relevant about how to specify where to show additional windows on the screen, other than Window.Current.Bounds property.

Here is the simplified version of the method that I am using to create additional windows. The method signature is: CreateFrameWindow(Size size, Type pageType, object parameter)

CoreApplicationView newWindow = CoreApplication.CreateNewView();

ApplicationView newView = null;
bool result = await newWindow.Dispatcher.TryRunAsync(CoreDispatcherPriority.Normal, () =>
{
    Frame frame = new Frame();
    frame.Navigate(pageType, parameter);
    Window.Current.Content = frame;

    Window.Current.Activate();
    newView = ApplicationView.GetForCurrentView();
});

result = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newView.Id);
newView.TryResizeView(size);

The TryResizeView works fine as long as the secondary window has enough space to resize based on its current location on the screen. I want to enable resize up to the maximum available size (size of window when it is maximized) and place it to the center of the screen. If this is not possible, placing to the center of the parent or main window is acceptable.

Upvotes: 1

Views: 1368

Answers (2)

ShaneOss
ShaneOss

Reputation: 192

For AppWindow I'm using...

//Set custom window size
Windows.UI.WindowManagement.Preview.WindowManagementPreview.SetPreferredMinSize(appWindow, new Size(500, 500));
appWindow.RequestSize(new Size(500, 500));

DisplayRegion displayRegion = ApplicationView.GetForCurrentView().GetDisplayRegions()[0];
double displayRegionWidth = displayRegion.WorkAreaSize.Width;
double displayRegionHeight = displayRegion.WorkAreaSize.Height;
int horizontalOffset = (int)(displayRegionWidth - 520); //New window is 500 width + 20 to accomodate for padding
int verticalOffset = (int)(displayRegionHeight - 500); //New window is 500 height
appWindow.RequestMoveRelativeToDisplayRegion(displayRegion, new Point(horizontalOffset / 2 , verticalOffset / 2));

Upvotes: 0

Nico Zhu
Nico Zhu

Reputation: 32785

Show secondary window center of main window in UWP

CoreApplicationView does not provide api to set the view position manually. For your requirement please try to use AppWindow to archive this feature. And AppWindow has RequestMoveRelativeToDisplayRegion method that position the window in the specified display region at the specified offset. For more please refer official code sample scenario 5

Update

If you want to make your new window display in the center, you need know your windows size before, and calculate X Y value for RequestMoveRelativeToDisplayRegion method.

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

For get current display resolution please refer this case link

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;
var scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
var size = new Size(bounds.Width*scaleFactor, bounds.Height*scaleFactor);

Upvotes: 1

Related Questions