拉伸ItemsControl的项目

时间:2012-04-30 08:51:45

标签: wpf datatemplate itemscontrol

我在这里建立了一个小型WPF应用程序。它完全使用MVVM构建,只使用链接到视图模型类型的DataTemplates。

我已经看到很多关于如何拉伸和剪辑ListBox es内容以使项目填充其父级的问题。经过大量的实验后,我设法解决了这个问题,但现在我发现自己处于与ItemsControl相同的情况下,但同样的技巧似乎不起作用。

以下是正在使用的DataTemplate之一(简单TextBox)。请注意我是如何尝试设置HorizontalAlignment ...

<DataTemplate DataType="{x:Type vm:OneOfMyViewModelTypes}">
    <TextBox 
        Text="{Binding Path=Value}"
        HorizontalAlignment="Stretch"
        />
</DataTemplate>

以下是ItemsControl ...

中的Grid
<Grid Background="Gray">
            <Grid.Margin>
                <Thickness 
                    Left="{StaticResource ConfigurationDefaultMargin}" 
                    Right="{StaticResource ConfigurationDefaultMargin}" 
                    Bottom="{StaticResource ConfigurationDefaultMargin}" 
                    Top="{StaticResource ConfigurationDefaultMargin}" 
                    />
            </Grid.Margin>
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="_key" Width="Auto"/>
                <ColumnDefinition SharedSizeGroup="_value" Width="*"/>
            </Grid.ColumnDefinitions>

            <ItemsControl 
                Background="DimGray" 
                Grid.IsSharedSizeScope="True"
                ItemsSource="{Binding Path=Configuration, Mode=OneWay}" 
                HorizontalAlignment="Stretch" 
                HorizontalContentAlignment="Stretch"
                >
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition SharedSizeGroup="_key"/>
                                <ColumnDefinition SharedSizeGroup="_value"/>
                            </Grid.ColumnDefinitions>
                            <TextBlock
                                Style="{StaticResource ExtensionConfigurationLabel}"
                                Grid.Column="0"
                                Margin="5,5,5,0"
                                Text="{Binding Path=Caption}" 
                                />
                            <ContentPresenter 
                                Grid.Column="1"
                                HorizontalAlignment="Stretch"
                                Margin="5,5,5,0"
                                Content="{Binding}" 
                                />
                        </Grid>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </Grid>

我用颜色来查看控件的大小。 Grid为灰色,ItemsControl为深灰色。

这是结果......

This is the result

正如您可以从颜色中看到,Grid包含ItemsControl,而HorizontalAlignment则没有。我确实将Stretch属性设置为{{1}}但似乎没有效果。还有什么我需要做的吗?

由于

1 个答案:

答案 0 :(得分:2)

您的主(外部)网格中有两列,但您只使用第一列。 第二列使用所有剩余空间。