Почему мои размеры окна 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>
20
задан Jason Coyne 30 June 2010 в 02:29
поделиться

3 ответа

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

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

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

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

35
ответ дан 29 November 2019 в 23:22
поделиться

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

Height="296" Width="634"

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

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


Фактически, небольшой поиск выявил свойство Window.SizeToContent , которое может быть тем, что вы ищете. По умолчанию используется Вручную , но если вы установите одно из других значений ( Ширина , Высота или WidthAndHeight ), вы можете увидеть лучшую презентацию.

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

SizeToContent="WidthAndHeight"

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

7
ответ дан 29 November 2019 в 23:22
поделиться

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

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

Поскольку сетка является динамической компоновкой, она будет растягиваться до ширины и высоты окна. Чтобы ограничить размер окна, вам необходимо указать для окна свойства высоты и ширины.

6
ответ дан 29 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: