Подтвердить что ты не робот

Почему мой размер окна WPF по умолчанию невелик

У меня есть приложение 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>
4b9b3361

Ответ 1

Если вы создаете <Window/> с помощью этого кода:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" />

Затем, когда вы запустите это из Visual Studio, он отобразит окно того же размера, что и тот, который вы задали в своем вопросе. Так что это не то, что вы явно делали.

То, с чем вы столкнулись, - это рассчитанный по умолчанию размер WPF Window. Для разных результатов укажите параметр SizeToContent в окне, как указано paxdiablo, или явно задайте размер вашего окна с помощью MinHeight, MaxHeight, Height, MinWidth, MaxWidth и/или Width.

Ответ 2

Почему бы вам просто не добавить a:

Height="296" Width="634"

к определению Window? Я не уверен, где размер по умолчанию приходит, но я установил конкретные размеры в своих окнах, чтобы обойти это. Затем я динамически изменяю размер в стартовом коде приложения.

Я надеюсь, что WPF будет иметь функцию pack -like, где он рекурсивно устанавливает элементы управления на основе предпочтительных размеров суб-элементов управления (у Swing и wxPython оба имеют эту функцию), поэтому вы можете захотеть поискать что.


На самом деле, немного поиска оказалось свойство Window.SizeToContent, которое может быть тем, что вы ищете. Его значение по умолчанию - Manual, но если вы установите его на одно из других значений (Width, Height или WidthAndHeight), вы можете увидеть лучшую презентацию.

На самом деле, я просто отказался от ноутбука Windows и ввел:

SizeToContent="WidthAndHeight"

в определение окна и выглядит идеально. Поэтому я предлагаю попробовать и посмотреть, исправляет ли он (или, по крайней мере, работает) вашу проблему.

Ответ 3

В дизайне вы видите маленький, потому что у вас есть свойства дизайна смешивания для окна.

d: DesignHeight = "296" d: DesignWidth = "634"

Так как Grid представляет собой динамический макет, он будет растягиваться по ширине и высоте окна. Чтобы ограничить размер окна, вам нужно указать свойства Height и Width в окне.