У меня есть wpf приложение с несколькими формами. Во время проектирования они являются маленькими, и они не установлены на автоматический размер. Однако во время выполнения они являются гигантскими, даже без содержания в них для создания их большими.
Почему это происходит?
Вот одна из форм
<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>
Если вы создадите
с помощью этого кода:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" />
Затем, когда вы запустите его из Visual Studio, он отобразит окно того же размера, что и то, которое вы задали в своем вопросе. Так что это не то, что вы явно делали.
Вы столкнулись с вычисляемым по умолчанию размером окна WPF
. Для получения других результатов укажите параметр SizeToContent
в окне, как указал paxdiablo, или явно установите размер окна с помощью MinHeight
, MaxHeight
, Свойства высоты
, MinWidth
, MaxWidth
и / или Width
.
Почему бы вам просто не добавить:
Height="296" Width="634"
в определение Window
? Я не уверен, откуда берется размер по умолчанию, но я установил определенные размеры в своих окнах, чтобы обойти это. Затем я динамически изменяю размер кода запуска приложения.
Я надеюсь, что WPF будет иметь функцию, похожую на pack
, где он рекурсивно устанавливает элементы управления на основе предпочтительных размеров субэлементов управления (Swing и wxPython имеют эту функцию), поэтому вы можете захотеть искать это.
Фактически, небольшой поиск выявил свойство Window.SizeToContent
, которое может быть тем, что вы ищете. По умолчанию используется Вручную
, но если вы установите одно из других значений ( Ширина
, Высота
или WidthAndHeight
), вы можете увидеть лучшую презентацию.
На самом деле, я просто подключился к ноутбуку с Windows и ввел:
SizeToContent="WidthAndHeight"
в определение окна, и он выглядит идеально по размеру. Итак, я предлагаю попробовать и посмотреть, решит ли он (или, по крайней мере, решит) вашу проблему.
В дизайне вы видите маленькое, потому что у вас есть свойства смешанного дизайна для окна.
d: DesignHeight = "296" d: DesignWidth = "634"
Поскольку сетка является динамической компоновкой, она будет растягиваться до ширины и высоты окна. Чтобы ограничить размер окна, вам необходимо указать для окна свойства высоты и ширины.