How to make all controls resize accordingly proportionally when window is maximized?

后端 未结 3 1947
野的像风
野的像风 2020-11-29 17:05

When I clicked on the maximize button the window is maximized but the controls are not resized proportionally. What is the best way to make the controls resize accordingly?

3条回答
  •  离开以前
    2020-11-29 17:39

    Well, it's fairly simple to do.

    On the window resize event handler, calculate how much the window has grown/shrunk, and use that fraction to adjust 1) Height, 2) Width, 3) Canvas.Top, 4) Canvas.Left properties of all the child controls inside the canvas.

    Here's the code:

    private void window1_SizeChanged(object sender, SizeChangedEventArgs e)
            {
                myCanvas.Width = e.NewSize.Width;
                myCanvas.Height = e.NewSize.Height;
    
                double xChange = 1, yChange = 1;
    
                if (e.PreviousSize.Width != 0)
                xChange = (e.NewSize.Width/e.PreviousSize.Width);
    
                if (e.PreviousSize.Height != 0)
                yChange = (e.NewSize.Height / e.PreviousSize.Height);
    
                foreach (FrameworkElement fe in myCanvas.Children )
                {   
                    /*because I didn't want to resize the grid I'm having inside the canvas in this particular instance. (doing that from xaml) */            
                    if (fe is Grid == false)
                    {
                        fe.Height = fe.ActualHeight * yChange;
                        fe.Width = fe.ActualWidth * xChange;
    
                        Canvas.SetTop(fe, Canvas.GetTop(fe) * yChange);
                        Canvas.SetLeft(fe, Canvas.GetLeft(fe) * xChange);
    
                    }
                }
            }
    

提交回复
热议问题