【问题标题】:Why are my WPF window sizes defaulting to be huge为什么我的 WPF 窗口大小默认很大
【发布时间】:2011-03-09 22:25:48
【问题描述】:

我有一个带有几个表单的 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>

【问题讨论】:

  • 它们在运行时的大小是多少? 634x296?
  • 我正在运行 1900x1280 宽屏,并且窗口在屏幕的每一侧只留下大约 1/2 英寸。 (以及左上角和下角 1/2 英寸。右边可能 2 英寸。但仍然很大)

标签: wpf size window


【解决方案1】:

你为什么不添加一个:

Height="296" Width="634"

Window 定义?我不确定默认尺寸来自哪里,但我已经在我的窗户上设置了特定尺寸来解决这个问题。然后我在应用程序启动代码中动态调整大小。

我希望 WPF 将具有类似pack 的功能,它可以根据子控件的首选大小递归设置控件(Swing 和 wxPython 都具有此功能),因此您可能想去寻找那个。


实际上,经过一番搜索,Window.SizeToContent 属性可能就是您正在寻找的。它的默认值为Manual,但如果您将其设置为其他值之一(WidthHeightWidthAndHeight),您可能会看到更好的演示文稿。

事实上,我只是切换到 Windows 笔记本电脑并输入:

SizeToContent="WidthAndHeight"

进入 Window 定义,它看起来完美的大小。因此,我建议您尝试一下,看看它是否可以解决(或至少可以解决)您的问题。

【讨论】:

  • @Jason:不知道,但我怀疑它正在查询您的系统指标以获取屏幕尺寸。我当前的应用程序(我的第一个 WPF 应用程序)的行为类似,因为它居中并在边缘留下一点点。我记得在某处读到,如果您没有指定 WPF,WPF 将默认为主监视器的宽度和高度的 60%,而且还有 许多 其他因素也会影响它(尽管我现在找不到那个参考)。我想我以后只会使用SizeToContent(请参阅我的更新),而不是依赖一些 MS 笨拙的人猜对:-)
  • 我终于找到了链接,不幸的是,这恰好使这个问题成为了骗子:stackoverflow.com/questions/1437099/…
  • 只要我得到一个好的答案,我可以接受它是重复的 :)
  • 这不是一个重复的问题,但它的答案确实涵盖了相同的领域。
  • 无论如何在 WPF 中设置固定的宽度和高度是邪恶的。 WPF 的一大优点是它会自动适应不同的字体大小,所以如果你改变你的系统字体,一切都会变得更大。
【解决方案2】:

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

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

由于 Grid 是一种动态布局,它将被拉伸到窗口的宽度和高度。要限制窗口大小,您需要在窗口中提及 Height 和 Width 属性。

【讨论】:

    【解决方案3】:

    如果您使用此代码创建&lt;Window/&gt;

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

    然后,当您从 Visual Studio 运行它时,它会显示一个与您输入问题的窗口大小相同的窗口。所以这不是你明确做的任何事情。

    您遇到的是 WPF Window 的默认计算大小。对于不同的结果,请在 Window 上指定 SizeToContent 参数,正如 paxdiablo 指出的那样,或者使用 MinHeightMaxHeightHeightMinWidthMaxWidth 和/ 或 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 出现以来几乎保持不变。
    • 那是根据主屏幕的大小计算出来的,对吧?
    • 我注意到在属性窗格中设置WidthHeight 实际上是设置设计器的宽度和高度,而不是实际的宽度和高度..
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2011-07-14
    • 2018-07-15
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多