Почему размеры моего окна WPF по умолчанию огромны - PullRequest
19 голосов
/ 30 июня 2010

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

Ответы [ 3 ]

35 голосов
/ 30 июня 2010

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

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

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

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

7 голосов
/ 30 июня 2010

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

Height="296" Width="634"

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

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


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

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

SizeToContent="WidthAndHeight"

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

6 голосов
/ 30 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...