如何知道为什么我的WPF窗口如此之大?

时间:2011-08-30 18:37:41

标签: c# .net wpf xaml window

我在WPF中创建了以下窗口。这就是它的表现方式:

enter image description here

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

这是与问题相关的代码:

<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>

我的第一个问题是如何调试此问题,第二个问题是此特定情况下发生的情况。

提前致谢。

6 个答案:

答案 0 :(得分:2)

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

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

这就是说,“让窗户尽可能宽阔,然后调整到高度的内容”

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

答案 1 :(得分:2)

此问题与以下内容重复:Why are my WPF window sizes defaulting to be huge

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

答案 2 :(得分:1)

<Window HorizontalAlignment="Stretch"

这就是问题,我想。

答案 3 :(得分:1)

对我来说似乎是这个:

HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"

它挡住了窗户......

答案 4 :(得分:1)

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

SizeToContent="WidthAndHeight"

如何调试此类事情?也许训练你的大脑能够解析XAML并在飞行中进行布局......我知道,不是很有帮助。

答案 5 :(得分:0)

也许这填补了现有空间(就像它应该的那样)。

    <ColumnDefinition Width="*"/>