设计Xaml网格,高度= 100%,最小行高

时间:2014-02-13 07:16:02

标签: c# wpf xaml layout grid

这是问题所在。我有一个网格,其中包含一些用xaml编写的数据:

    <ItemsControl x:Name="ItemsControl" ItemsSource="{Binding Path=MyObjectCollection, UpdateSourceTrigger = PropertyChanged}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid Width="Auto">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="27"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="30"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" MaxHeight="75" MinHeight="30"></RowDefinition>
                    </Grid.RowDefinitions>

                    <Label Name="LabelNumber" Content="{Binding ObjectID}" Grid.Column="0" Style="{StaticResource MyStyleLabel}" />
                    <control:FocusMeterControl x:Name="HorizontalFocusMeterControl" Value="{Binding ObjectProperty}" Height="Auto" Grid.Column="1" />

                    <Button Name="RemoveObject" Content="-" Grid.Column="2" Margin="5,0,0,0" Click="ButtonBase_OnClick" Tag="{Binding Point}" Style="{StaticResource MyStyleButton}" />

                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

正如您所看到的,我正在为“MyObjectCollection”中的每个成员创建一个新网格。理想情况下,我认为我应该创建一行,因为这会使我的下一个问题 - 真正的问题更容易。

但是,即使可能,我还没有找到任何在xaml中执行此操作的好方法。如果没有从c#手动填充集合并在我的对象中手动设置row属性以便执行类似的操作,这是否可行

<Label Name="LabelNumber" Grid.Row="{Binding ManuallyCalculatedRowID}" ... />

我的主要问题是我希望网格/行都同样高,如果可能的话填写父窗口。如果父窗口太大,MaxHeight应该适用,我只想在下面有一些空白区域。

如果有任何不同,则父控件是Windows窗体ElementHost。

如果您需要任何其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

为了使所有行具有相同的高度,我们可以使用ItemsPanelTemplate并将其设置为UniformGrid来处理相同的大小调整问题:

<ItemsControl x:Name="ItemsControl" ItemsSource="{Binding Path=MyObjectCollection, UpdateSourceTrigger = PropertyChanged}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="1" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid Width="Auto">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="27"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="30"/>
                </Grid.ColumnDefinitions>

                <Label Name="LabelNumber" Content="{Binding ObjectID}" Grid.Column="0" Style="{StaticResource MyStyleLabel}" />
                <control:FocusMeterControl x:Name="HorizontalFocusMeterControl" Value="{Binding ObjectProperty}" Height="Auto" Grid.Column="1" />

                <Button Name="RemoveObject" Content="-" Grid.Column="2" Margin="5,0,0,0" Click="ButtonBase_OnClick" Tag="{Binding Point}" Style="{StaticResource MyStyleButton}" />

            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

请注意,我删除了ItemTemplate中的行定义,以解除项目的垂直大小限制。不确定这是否能解答您的问题,但这可以成为解决问题的良好起点。