Ширина столбца Binding Grid - PullRequest
       5

Ширина столбца Binding Grid

2 голосов
/ 09 февраля 2011

Я сталкиваюсь со следующей проблемой при разработке моего XAML.

Мне нужно прибыть в конец, чтобы расположить мои данные как сетку, но с пользовательским DataTemplate.Поэтому я создаю top Grid, который содержит две метки заголовков элементов данных.Ниже Grid я строю StackPanel с ItemsControl, который включает DataTemplate, который отображает мои данные.Все в порядке, когда я запускаю приложение, я получаю метки заголовков и элементы данных ниже, как сетку.Моя проблема в том, что ярлыки и содержимое элементов не выровнены правильно.Поэтому я подумал о привязке Width столбцов метки заголовка к ActualWidth ItemTemplate, но, к сожалению, это не работает.

Есть ли какой-нибудь чистый способ добиться этого?Заранее спасибо ...

1 Ответ

5 голосов
/ 09 февраля 2011

Существует простой способ сделать это, используя 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>

Все элементы будут иметьодинаковой ширины в столбцах, единственное, что вам может понадобиться для выравнивания вручную, это раздел заголовков над элементами, в зависимости от настроек полей и т. п.

...