240

What I am trying to do is show a window, that does not explicitly have a height/width, (both values omitted or set to Auto). I was guessing that the window would find out its size by auto - calculating all contained usercontrols sizes, but this doesn't actually work!

Instead I get a big window with Actualwidth and Actualheight values both set to 512 (?!?!)

Window declaration:

<Window x:Class="Window3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window3" Height="Auto"> <StackPanel> <Label>Window</Label> </StackPanel> </Window> 

Showing this window as a dialog via:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click Dim dlg As New Window3 dlg.ShowDialog() End Sub 

Is there a solution for this? I don't want to explicitly set the size of my window because many controls in the form will be collapsed based on constructor parameters, and trying to find the actual size of the form would be tricky (and ugly).

1
  • 9
    You may also want to center the window with .WindowStartupLocation set to "CenterScreen" Commented Jul 5, 2012 at 14:16

5 Answers 5

457

Set the window's property SizeToContent="WidthAndHeight". This should help.

Sign up to request clarification or add additional context in comments.

6 Comments

For lazy people that want to copy paste SizeToContent="WidthAndHeight" ;)
Careful to use SizeToContent="WidthAndHeight", If the size of content of window increases more than the screen size, window can overflow from screen.
@KyloRen so a MaxWidth or MaxHeight should be set to avoid the problem
@CarlosLiu long time, I'm out of practice and can't remember, but yes logically sounds right. try in a demo :)
This is great, but I'm still curious why Height="Auto" and Width="Auto" doesn't accomplish the same thing? I'm guessing because window content isn't considered with these settings.
|
9

Old question but an updated answer:

As @Muad'Dib suggested in his answer :

you should set SizeToContent="WidthAndHeight".

If the size of content of window increases more than the screen size, window can overflow from screen. So, you must consider:

MaxWidth="600" MaxHeight="400" 

1 Comment

And what to do when the MaxHeight="400" is not respected? it grows until the screen limit?
3

Well you can't set the window height to auto, to do this you can use a little trick, name the main main grid container, set its height to auto then bind the window height to the height of the main grid

1 Comment

This approach requires care, since you don't want the height of the whole window to match the height of the main grid; you want the height of the content area of the window to match the height of the grid.
1

You can do the following:

MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth; MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight; SizeToContent = SizeToContent.WidthAndHeight; 

Please note that using SizeToContent alone will work. However, if your content size is bigger than the screen the window will overflow beyond your screen but combining this with setting the MaxWidth and MaxHeight of the window to be as your screen will basically fit the window to contents up to the maximum of your screen.

Comments

0

Set size in curent screen with loaded event windows

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.