Reputation: 6636
I have a wpf application with a few forms. At design time they are small, and they are not set to auto size. However at run time they are giant, even with no content in them to make them big.
Why is this happening?
Here is one of the forms
<Window x:Class="SuperPluginPicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:tree="clr-namespace:Aga.Controls.Tree;assembly=Aga.Controls"
mc:Ignorable="d"
d:DesignHeight="296" d:DesignWidth="634" Title="Plugin Selector" WindowStartupLocation="CenterOwner">
<Grid>
<DockPanel LastChildFill="true">
<StackPanel DockPanel.Dock="Bottom" Height="30" Orientation="Horizontal">
<Button Content="Ok" Name="btnOk" Click="btnOk_Click"></Button>
<Button Content="Cancel" Name="btnCancel" Click="btnCancel_Click"></Button>
</StackPanel>
<StackPanel DockPanel.Dock="Right">
<Label Content="Selected Plugins"></Label>
<ListBox Name="lstSelectedPlugins" Width="200">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
<StackPanel DockPanel.Dock="Right" Width="100" VerticalAlignment="Center">
<Button Content="Add" Name ="btnAdd" Click="btnAdd_Click"></Button>
<Button Content="Remove" Name="btnRemove" Click="btnRemove_Click"></Button>
<Button Content="Remove All" Name="btnRemoveAll" Click="btnRemoveAll_Click"></Button>
</StackPanel>
<tree:TreeList x:Name="pluginTree">
<tree:TreeList.View>
<GridView x:Name="treeGrid">
<GridView.Columns>
<GridViewColumn Width="Auto" Header="Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<tree:RowExpander/>
<TextBlock Text="{Binding Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Author" Width="Auto" DisplayMemberBinding="{Binding Author}"/>
<GridViewColumn Header="Description" Width="Auto" DisplayMemberBinding="{Binding Type}"/>
</GridView.Columns>
</GridView>
</tree:TreeList.View>
</tree:TreeList>
</DockPanel>
</Grid>
</Window>
Upvotes: 26
Views: 24577
Reputation: 3130
If you create a <Window/>
with this code:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" />
Then when you run that from Visual Studio it will display a window the same size as the one you put in your question. So this isn't anything you explicitly did.
What you've encountered is the default computed size of a WPF Window
. For different results, specify a SizeToContent
parameter on the Window, as paxdiablo pointed out, or explicitly set the size of your window with the MinHeight
, MaxHeight
, Height
, MinWidth
, MaxWidth
, and/or Width
properties.
Upvotes: 42
Reputation: 2015
In design you are seeing small because you have blend design properties for the window.
d:DesignHeight="296" d:DesignWidth="634"
Since Grid is a dynamic layout it will be stretch to the window's width & height. To restrict you window size you need to mention Height & Width properties to the window.
Upvotes: 7
Reputation: 881573
Why don't you just add a:
Height="296" Width="634"
to the Window
definition? I'm not sure where the default size comes from but I've set specific sizes on my windows to get around this. Then I dynamically resize in the application startup code.
I'm hoping that WPF will have a pack
-like feature where it recursively sets controls based on the preferred sizes of the sub-controls (Swing and wxPython both had this feature) so you may want to go looking for that.
Actually, a bit of searching has turned up the Window.SizeToContent
property which may be what you're looking for. Its default is Manual
but, if you set it to one of the other values (Width
, Height
or WidthAndHeight
), you may see a better presentation.
In fact, I just nicked over to the Windows laptop and entered:
SizeToContent="WidthAndHeight"
into the Window definition and it looks perfectly sized. So, I'd suggest giving that a try and seeing if it fixes (or at least works around) your problem.
Upvotes: 13