开发者

C# WPF how to set location,width and height of the controls programmatically?

开发者 https://www.devze.com 2023-03-04 15:52 出处:网络
I\'m doing my first WPF application. im having problem whereby when my form is maximized or fullscreen, my controls wont resize and just stay in the same location. only the form is maximized.

I'm doing my first WPF application. im having problem whereby when my form is maximized or fullscreen, my controls wont resize and just stay in the same location. only the form is maximized.

in winform, I can do the adjustment in the .cs like the following:

panel6.Width
panel6.Height
panel6.Location

this will help me set it if my form is maximized. I do it by using some arithmetics where I get the resolution of screen and some calculation and get the value and can set it to the width, height and location. BUT THIS IS IN WINFORM.

how will I tackle this issue for maximized and fullscreen in WPF? is there a way to be done through the .cs 开发者_开发问答file programmatically? or does WPF come with a easy built in control to tackle this issue?

suppose for this example I'm using dockpanel in the WPF.

it will be pointless if window is maximized but the other controls remains.


To set Width and Height:

dockpanel1.width = 230;
dockpanel1.height = 230;

as for location, wpf uses Margin:

dockpanel1.Margin = new Thickness(0,440,836,40);


It is possible to programmatically move child elements on a Canvas.

In xaml:

<Canvas>
    <YourElement Canvas.Top="x" Canvas.Left="y"/>
</Canvas>

In C#:

Canvas.SetTop(YourElement, newX);
Canvas.SetLeft(YourElement, newY);


Use some calculations like (control's previous position * layout's new size) / layout's previous size = control's new position

But the easiest way is to use XAML Use Grid and put columns and rows in it and set the size of columns and rows to * So on layout size change, your controls will reposition in refer to parent's change in size which your grid is child of it. And you could even have auto resizable controls just by setting the controls' margins in columns and rows. Don't forget horizontal and vertical alignments set to stretch.


For your specific problem, would recommend you to use a DockPanel and place your controls in it. Here's first bing result: WPF Tutorial | Dock Panel

And as already suggested by flq and blindmeis, do study the layout panels. That will make your life really simpler in WPF.


you should look at all the different layoutpanels in wpf (Grid, DockPanel, StackPanel, Canvas ...)

so if you set any properties for your Panel, it behaves different if your LayoutPanel change.


If you want explicitly position your child items use Canvas panel

<Canvas>
    <YourElement Canvas.Top="x" Canvas.Left="y"/>
</Canvas>
0

精彩评论

暂无评论...
验证码 换一张
取 消