【问题标题】:How to know why my WPF Window is so big?如何知道为什么我的 WPF 窗口这么大?
【发布时间】:2011-08-30 18:37:40
【问题描述】:

我在 WPF 中创建了以下窗口。这是它的显示方式:

我不知道为什么屏幕显示这么大,也不知道如何调试它为什么会变得这么宽。

这是与问题相关的代码:

<Window x:Class="Picis.CpCustomize.CustomizeControls.Dialogs.EditIntegerWindow"
MinWidth="350"
SizeToContent="Height"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ResizeMode="CanResize" 
ShowInTaskbar="False" 
WindowStartupLocation="CenterScreen" 
WindowState="Normal"
Loaded="OnWindowLoaded">

<!-- Main frame -->
<Grid>

    <!-- Layout -->
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

    <TextBlock VerticalAlignment="Center" MinWidth="100" TextAlignment="Right">
        <TextBlock.Text>
            <Binding Converter="{StaticResource Localizer}" ConverterParameter="General.Value" />
        </TextBlock.Text>
    </TextBlock>

    <TextBox x:Name="valueTextBox" Grid.Column="1" Margin="5" Text="{Binding Path=Value}"/>

    <TextBlock  VerticalAlignment="Center"  Grid.Row="1" Grid.Column="0"  HorizontalAlignment="Right" Visibility="{Binding Path=ShowComments, Converter={StaticResource VisiConv}, ConverterParameter=Collapse}" MinWidth="100" TextAlignment="Right">
            <TextBlock.Text>
                <Binding Converter="{StaticResource Localizer}" ConverterParameter="EditParamDlg.Comment" />
            </TextBlock.Text>
    </TextBlock>

    <TextBox x:Name="commentTextBox" Grid.Row="1" Grid.Column="1" Margin="5" Visibility="{Binding Path=ShowComments, Converter={StaticResource VisiConv}, ConverterParameter=Collapse}" Text="{Binding Path=Comment}"/>

    <CheckBox Grid.Row="2" Grid.Column="1" Margin="5" x:Name="isDeletedCheckBox" Visibility="{Binding Path=ShowIsDeleted, Converter={StaticResource VisiConv}, ConverterParameter=Collapse}"
            IsChecked="{Binding Path=IsDeleted}">
        <CheckBox.Content>
            <Binding Converter="{StaticResource Localizer}" ConverterParameter="EditParamDlg.IsDeleted" />
        </CheckBox.Content>
    </CheckBox>

    <UniformGrid Grid.Row="3" Grid.Column="1" Margin="5" HorizontalAlignment="Right" Columns="2">
        <Button  x:Name="okButton" Click="OnOk"  IsDefault="True">
            <Button.Content>
                <Binding Converter="{StaticResource Localizer}" ConverterParameter="General.Ok" />
            </Button.Content>
        </Button>
        <Button x:Name="cancelButton"  Click="OnCancel" Margin="5,0,0,0"  IsCancel="True">
            <Button.Content>
                <Binding Converter="{StaticResource Localizer}" ConverterParameter="General.Cancel" />
            </Button.Content>
        </Button>
    </UniformGrid>

</Grid>
</Window>

我的第一个问题是如何调试这个问题,第二个问题是在这个特定场景中发生了什么。

提前致谢。

【问题讨论】:

    标签: c# .net wpf xaml window


    【解决方案1】:

    这个问题是重复的:Why are my WPF window sizes defaulting to be huge

    并根据:Window Size when SizeToContent is not specified 未指定时的默认大小是主屏幕宽度的 60% 和高度的 60%。

    【讨论】:

      【解决方案2】:

      您明确地将窗口设置为拉伸宽度:

      SizeToContent="Height"
      HorizontalAlignment="Stretch"
      VerticalAlignment="Stretch"
      

      这就是说,“使窗口尽可能宽和高,然后根据内容的高度调整大小”

      如果您删除它,并将宽度和高度设置为“自动”(或省略),您可能会得到您想要的。尝试只删除所有这三行(这将忽略对齐,可能会导致使用默认的“自动”宽度/高度。)

      【讨论】:

      • 但是无论如何,有没有办法调试这个?我有时会得到意想不到的结果,但我还没有找到调试它们的方法。 WPF 计算它的东西,但它应该是一种知道它为什么这样做的方法,对吗?
      • @SoMoS:您可以使用 Mole (molosoft.com) 或 Snoop (snoopwpf.codeplex.com) 之类的工具来帮助简化流程,但没有任何东西可以准确显示“这就是导致布局的原因这样……”,至少我没有见过。
      • 除了语法导致它以这种方式布局。
      【解决方案3】:
      <Window HorizontalAlignment="Stretch"
      

      我猜这就是问题所在。

      【讨论】:

        【解决方案4】:

        在我看来是这个:

        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch"
        

        它覆盖了窗户......

        【讨论】:

          【解决方案5】:

          窗口上的对齐方式实际上不应该做任何事情,因为没有容器可以引用,但你只告诉窗口在高度上收缩到内容,我会将这种行为更改为两个维度:

          SizeToContent="WidthAndHeight"
          

          如何调试这种东西?也许训练你的大脑能够解析 XAML 并动态进行布局......我知道,不是很有帮助。

          【讨论】:

            【解决方案6】:

            也许这正在填充现有空间(就像它应该的那样)。

                <ColumnDefinition Width="*"/>
            

            【讨论】:

            • 是的,但是谁创造了那个空间?我的意思是,没有任何东西可以创建它,* 不应该创建新空间,对吧?
            • 这只会填充窗口内的空间——但这不是根本原因。这个问题的根源在于 Window 声明本身。
            • ColumnDefinition 创建了该空间。 * 表示占用尽可能多的空间。我同意 Reed 在顶部窗口部分中取出拉伸并使用 Auto 作为您的宽度。
            猜你喜欢
            • 1970-01-01
            • 2011-03-09
            • 2011-04-10
            • 2016-09-19
            • 2019-08-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-18
            相关资源
            最近更新 更多