为什么我的WPF窗口大小默认为巨大

Jas*_*yne 20 size wpf window

我有一个带有几种形式的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>
Run Code Online (Sandbox Code Playgroud)

Rob*_*ins 35

如果您<Window/>使用此代码创建:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" />
Run Code Online (Sandbox Code Playgroud)

然后,当您从Visual Studio运行它时,它将显示一个与您在问题中放置的窗口大小相同的窗口.所以这不是你明确做的任何事情.

您遇到的是WPF的默认计算大小Window.对于不同的结果,指定SizeToContent窗口参数,如paxdiablo指出的那样,或者明确地与设置您的窗口的大小MinHeight,MaxHeight,Height,MinWidth,MaxWidth,和/或Width性能.

  • 顺便说一下,如果你在MFC,Win32或Win16中创建一个窗口,你会发现你得到相同的默认大小.例如,Win32代码`CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);`给出与WPF相同大小的窗口.WPF没有选择默认大小:Windows自己就是这样做的,使用的算法自1987年Windows 2.0发布以来几乎保持不变. (3认同)

pax*_*blo 7

你为什么不添加一个:

Height="296" Width="634"
Run Code Online (Sandbox Code Playgroud)

Window定义是什么?我不确定默认大小的来源,但我已经在我的窗口设置了特定的大小来解决这个问题.然后我在应用程序启动代码中动态调整大小.

我希望WPF会有一个类似pack的功能,它根据子控件的首选大小递归设置控件(Swing和wxPython都有这个功能),所以你可能想去寻找它.


实际上,一些搜索已经出现了Window.SizeToContent属性,这可能是你正在寻找的.它的默认值是,Manual但是,如果您将其设置为其他值(Width,HeightWidthAndHeight)之一,您可能会看到更好的演示文稿.

事实上,我刚刚接到Windows笔记本电脑并输入:

SizeToContent="WidthAndHeight"
Run Code Online (Sandbox Code Playgroud)

进入Window定义,看起来大小合适.所以,我建议尝试一下,看看它是否修复了(或者至少可以解决)你的问题.


Rag*_*han 6

在设计中,您看到的很小,因为您具有窗口的混合设计属性.

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

由于Grid是动态布局,因此它将延伸到窗口的宽度和高度.要限制窗口大小,您需要在窗口中提及"高度和宽度"属性.