绑定网格列宽

Was*_*sim 2 .net wpf binding wpf-controls


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

我需要到最后来安排我的数据,如网格,但有一个自定义DataTemplate.所以我创建了一个顶部Grid,其中包含数据项的两个标题标签.下面Grid我建立一个StackPanelItemsControl它包括DataTemplate用于显示我的数据.一切都很好,当我运行应用程序时,我得到标题标签和下面的数据项像网格.我的问题是标签和项目的内容没有正确对齐.所以我想到Width将标题标签列绑定到ActualWidth其中ItemTemplate,但不幸的是,这不起作用.

是否有任何干净的方式来实现这一目标?
提前致谢 ...

H.B*_*.B. 5

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

例如

    <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>
Run Code Online (Sandbox Code Playgroud)

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