WPF - высота пользовательского контроля не соответствует размеру - PullRequest
0 голосов
/ 04 марта 2011

У меня есть проблема, которую я не могу решить.Я надеюсь, что смогу объяснить вещи достаточно.

По сути, у меня есть пользовательский контроль, который я хочу использовать как своего рода в модальном диалоговом окне.

<Grid>
    <Rectangle Opacity=".75" Fill="White"/>
    <Border Width="425" BorderBrush="LightGray" BorderThickness="2" CornerRadius="20,0,20,0" Padding="3">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="auto"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="auto"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="15"/>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <!-- First Name -->
            <Label Grid.Row="0" Grid.Column="0" Content="First Name:"/>
            <TextBox Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding FirstName}" Margin="3"/>
            <!-- Last Name -->
            <Label Grid.Row="0" Grid.Column="3" Content="Last Name:"/>
            <TextBox Grid.Row="0" Grid.Column="4" Grid.ColumnSpan="2" Text="{Binding LastName}" Margin="3"/>
            <!-- Address -->
            <Label Grid.Row="1" Grid.Column="0" Content="Address:"/>
            <TextBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="5" Text="{Binding Address}" HorizontalAlignment="Stretch" Margin="3"/>
            <!-- City -->
            <Label Grid.Row="2" Grid.Column="0" Content="City:"/>
            <TextBox Grid.Row="2" Grid.Column="1"  Text="{Binding City}" Margin="3"/>
            <!-- State -->
            <Label Grid.Row="2" Grid.Column="2" Content="State:"/>
            <ComboBox Grid.Row="2" Grid.Column="3" ItemsSource="{Binding States}" SelectedValue="{Binding State}" Margin="3"/>
            <!-- Zip Code -->
            <Label Grid.Row="2" Grid.Column="4" Content="Zip Code:"/>
            <TextBox Grid.Row="2" Grid.Column="5" Text="{Binding ZipCode}" Margin="3"/>
            <Button Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="6" Width="100" HorizontalAlignment="Center" Content="Save" Command="{Binding SaveCustomerCommand}"/>
        </Grid>
    </Border>
</Grid>

У меня также есть ресурсный словарь, содержащий шаблон данных для подключения этого пользовательского элемента управления к его модели представления.

<DataTemplate DataType="{x:Type vm:CreateCustomerViewModel}">
    <view:CreateCustomerView/>
</DataTemplate>

Наконец, в модели представления главного окна я создаю экземпляр модели представления элемента управленияи в представлении главного окна я использую itemcontrol и привязываю его свойство itemssource к экземпляру модели представления элемента управления.

        <ItemsControl Height="600" Grid.Row="0" ItemsSource="{Binding CreateCustomerViewModel}" Grid.RowSpan="2" />

Теперь моя проблема заключается в использовании itemcontrol в главном окне, яЯ пробовал несколько разных способов, но я не могу получить контроль над высотой окна.Я не уверен, должен ли я использовать элемент управления контентом или что я делаю неправильно.Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

ItemsControl для коллекций. По умолчанию он использует StackPanel для хранения своих дочерних элементов, что запрещает растяжение в направлении стека (по умолчанию вертикальное). Для отдельного элемента используйте ContentControl (база таких вещей, как Button и Label):

<ContentControl Height="600" Grid.Row="0" Content="{Binding CreateCustomerViewModel}" Grid.RowSpan="2" />
1 голос
/ 04 марта 2011

Вы можете попробовать следующее:

Положите ItemsControl в Grid.

Объявите свой ItemsControl с VerticalContentAlignment="Stretch".

Это не должно иметь никакого значения, потому что это настройка по умолчанию, но объявите ваш ItemsControl с VerticalAlignment="Stretch" и попробуйте удалить Height="600".

...