绑定网格列宽

时间:2011-02-09 09:19:51

标签: .net wpf wpf-controls binding


我在设计XAML时面临以下问题。

我需要到达最后才能像网格一样安排我的数据但使用自定义DataTemplate。 所以我创建了一个顶部Grid,其中包含数据项的两个标题标签。 在Grid下方,我构建了StackPanel ItemsControl,其中包含DataTemplate,其中显示了我的数据。一切都很好,当我运行应用程序时,我得到标题标签和下面的数据项像网格。我的问题是标签和项目的内容没有正确对齐。所以我考虑将标题标题列的Width绑定到ActualWidth的{​​{1}},但不幸的是,这不起作用。

有没有干净的方法来实现这个目标?
提前谢谢......

1 个答案:

答案 0 :(得分:5)

有一种简单的方法可以在网格列中使用SharedSizeGroup并为父级分配Grid.IsSharedSizeScope="True"

e.g。

    <StackPanel Grid.IsSharedSizeScope="True">
        <Grid Name="Headers">
            <Grid.ColumnDefinitions>
                <ColumnDefinition SharedSizeGroup="A"/>
                <ColumnDefinition SharedSizeGroup="B"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="Name"/>
            <TextBlock Grid.Column="1" Text="Occupation"/>
        </Grid>
        <ItemsControl Name="Items" ItemsSource="{Binding Data}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition SharedSizeGroup="A"/>
                            <ColumnDefinition SharedSizeGroup="B"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0" Text="{Binding Name}"/>
                        <TextBlock Grid.Column="1" Text="{Binding Occupation}"/>
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>

所有项目在列中都具有相同的宽度,您可能需要手动排列的唯一内容是项目上方的标题部分,具体取决于边距设置等。