绑定网格列宽

发布于 2024-10-17 03:06:38 字数 433 浏览 3 评论 0原文


我在 XAML 设计中遇到以下问题。

我需要到达最后,像网格一样排列数据,但使用自定义的 DataTemplate。 因此,我创建了一个顶部 Grid,其中包含数据项的两个标题标签。 在 Grid 下面,我构建了一个带有 ItemsControlStackPanel,其中包含显示我的数据的 DataTemplate。一切都很好,当我运行应用程序时,我得到标题标签和下面的数据项,就像网格一样。我的问题是标签和项目内容未正确对齐。因此,我考虑将标题标签列的 Width 绑定到 ItemTemplateActualWidth,但不幸的是,这不起作用。

有什么干净的方法来实现这一目标吗?
提前致谢 ...

I am facing the following problem in the design of my XAML.

I need to arrive at the end to arrange my data like a grid but with a custom DataTemplate.
So I create a top Grid which contains the two header lables of the data items.
Below the Grid I build a StackPanel with an ItemsControl which includes the DataTemplate which displays my data. Everything is ok, when I run the application I get the header lables and the data items below like a grid. My problem is that the labels and the content of the items are not aligned correctly. So I thought about binding the Width of the header lable columns to the ActualWidth of the ItemTemplate, but unfortunately that does not work.

Is there any clean way to achive this?
Thanks in advance ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撞了怀 2024-10-24 03:06:38

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

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

There is a easy way to do this using SharedSizeGroup in the grid columns and assinging Grid.IsSharedSizeScope="True" for the parent.

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>

All the items will have the same widths in the columns, the only thing that you might need to line up manually is the headers section above the items, depending on margin settings and the like.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文