【问题标题】:Binding Grid column width绑定网格列宽
【发布时间】:2011-06-24 00:02:13
【问题描述】:


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

我需要到达最后才能像网格一样排列我的数据,但要使用自定义 DataTemplate。 所以我创建了一个顶部Grid,其中包含数据项的两个标题标签。 在Grid 下方,我构建了一个带有ItemsControlStackPanel,其中包括显示我的数据的DataTemplate。一切都很好,当我运行应用程序时,我得到了标题标签和下面的数据项,就像一个网格。我的问题是标签和项目的内容没有正确对齐。于是想到了将header label列的Width绑定到ItemTemplateActualWidth,可惜这样不行。

有什么干净的方法可以实现这一点吗?
在此先感谢...

【问题讨论】:

    标签: .net wpf wpf-controls binding


    【解决方案1】:

    有一种简单的方法可以在网格列中使用 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>
    

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

    【讨论】:

    • +1 - 这是每个人都应该知道的那些不明显的 WPF 技术之一。
    • @Robert Rossney:当然,这是解决常见问题的一个相当优雅的解决方案。
    猜你喜欢
    • 2012-03-07
    • 2010-09-22
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多