Как узнать, почему мое окно WPF такое большое? - PullRequest
1 голос
/ 30 августа 2011

У меня есть следующее окно, созданное в 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 ]

2 голосов
/ 30 августа 2011

Этот вопрос дублирует: Почему размеры моего окна WPF по умолчанию огромны

И в соответствии с: Размер окна, когда SizeToContent не указан Размер по умолчанию, если он не указан, составляет 60% от ширины и 60% от высоты вашего основного экрана.

2 голосов
/ 30 августа 2011

Вы явно устанавливаете окно растягиваться по ширине:

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

Это говорит: «сделайте окно максимально широким и высоким, но затем измените размер до содержимого высоты»

Если вы удалите это и установите для параметра «Ширина» и «Высота» значение «Авто» (или опустите его), скорее всего, вы получите то, что хотите.Попробуйте просто удалить все три из этих линий (что исключит выравнивание, может привести к использованию ширины / высоты по умолчанию «Авто»).

1 голос
/ 30 августа 2011

Выравнивания в окне на самом деле ничего не должны делать, поскольку нет контейнера для ссылки, но вы только указываете окну сокращаться до содержимого по высоте, я бы изменил это поведение на оба измерения:

SizeToContent="WidthAndHeight"

Как отлаживать подобные вещи? Возможно, тренируйте свой мозг, чтобы иметь возможность анализировать XAML и делать компоновку на лету ... я знаю, не очень полезно.

1 голос
/ 30 августа 2011

Мне кажется, это одно:

HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"

Он тянет окно ...

1 голос
/ 30 августа 2011
<Window HorizontalAlignment="Stretch"

в этом проблема, я думаю.

0 голосов
/ 30 августа 2011

Возможно, это заполняет существующее пространство (как и должно быть).

    <ColumnDefinition Width="*"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...