SharedSizeGroup на dataGrid - PullRequest
       0

SharedSizeGroup на dataGrid

2 голосов
/ 12 июля 2011

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

Update1

Я изменил xaml следующим образом:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20" MaxHeight="20" MinHeight="20" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid >
        <Grid.ColumnDefinitions >
            <ColumnDefinition   Width="{Binding ElementName=titleDataGridColumn, Path=ActualWidth}" />
            <ColumnDefinition   Width="{Binding ElementName=forenameDataGridColumn, Path=ActualWidth}"/>
            <ColumnDefinition   Width="{Binding ElementName=surnameDataGridColumn, Path=ActualWidth}" />
            <ColumnDefinition   Width="{Binding ElementName=dobDataGridColumn, Path=ActualWidth}" />
            </Grid.ColumnDefinitions>
        <Button Content="Clear" HorizontalAlignment="Stretch" Name="searchClearButton" VerticalAlignment="Stretch"   Grid.Column="0" Click="searchClearButton_Click" />
        <TextBox HorizontalAlignment="Stretch"  Name="forenameTextBox" VerticalAlignment="Stretch" Grid.Column="1" />
        <TextBox HorizontalAlignment="Stretch"  Name="surnameTextBox" VerticalAlignment="Stretch" Grid.Column="2" />
        <TextBox HorizontalAlignment="Stretch"  Name="dobTextBox" VerticalAlignment="Stretch" Grid.Column="3" />

    </Grid>

    <DataGrid Grid.Row="1" x:Name="DataDataGrid" HorizontalAlignment="Stretch" AutoGenerateColumns="False" VerticalAlignment="Stretch"  ItemsSource="{Binding}" AlternationCount="1"  IsReadOnly="True" SelectionMode="Single" >
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="titleDataGridColumn" Binding="{Binding Path='Title'}" Header="Title" Width="35*"    />
            <DataGridTextColumn x:Name="forenameDataGridColumn" Binding="{Binding Path='Forename'}" Header="Forename" Width="65*" />
            <DataGridTextColumn x:Name="surenameDataGridColumn" Binding="{Binding Path='Surname'}" Header="Surname" Width="65*"/>
            <DataGridTextColumn x:Name="dobDataGridColumn" Binding="{Binding DOB,StringFormat={}\{0:dd/MM/yyyy\}}"  Header="DOB" Width="70*"/>
        </DataGrid.Columns>
    </DataGrid>

</Grid>

Но теперь столбец фамилии в сетке больше соответствующего столбца в сетке данных, и кнопка немноговлево (можно исправить, установив поле на столбце сетки), но я не могу понять, почему столбцы с фамилиями имеют разный размер?

Обновление 2

Это работает (проблема заключалась в том, что surenameDataGridColumn был неправильным (орфография))

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="20" MaxHeight="20" MinHeight="20" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid >
        <Grid.ColumnDefinitions >
            <ColumnDefinition Width="6px"/>
            <ColumnDefinition   Width="{Binding ElementName=titleDataGridColumn, Path=ActualWidth}" />
            <ColumnDefinition   Width="{Binding ElementName=forenameDataGridColumn, Path=ActualWidth}"/>
            <ColumnDefinition   Width="{Binding ElementName=surnameDataGridColumn, Path=ActualWidth}" />
            <ColumnDefinition   Width="{Binding ElementName=dobDataGridColumn, Path=ActualWidth}" />
        </Grid.ColumnDefinitions>
        <Button Content="Clear" HorizontalAlignment="Stretch" Name="searchClearButton" VerticalAlignment="Stretch"   Grid.Column="1" Click="searchClearButton_Click" />
        <TextBox HorizontalAlignment="Stretch"  Name="forenameTextBox" VerticalAlignment="Stretch" Grid.Column="2" />
        <TextBox HorizontalAlignment="Stretch"  Name="surnameTextBox" VerticalAlignment="Stretch" Grid.Column="3" />
        <TextBox HorizontalAlignment="Stretch"  Name="dobTextBox" VerticalAlignment="Stretch" Grid.Column="4" />
       </Grid>

    <DataGrid Grid.Row="1" x:Name="DataGrid" HorizontalAlignment="Stretch" AutoGenerateColumns="False" VerticalAlignment="Stretch"  ItemsSource="{Binding}" AlternationCount="1"  IsReadOnly="True" >
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="titleDataGridColumn" Binding="{Binding Path='Title'}" Header="Title" Width="35*"    />
            <DataGridTextColumn x:Name="forenameDataGridColumn" Binding="{Binding Path='Forename'}" Header="Forename" Width="65*" />
            <DataGridTextColumn x:Name="surnameDataGridColumn" Binding="{Binding Path='Surname'}" Header="Surname" Width="65*"/>
            <DataGridTextColumn x:Name="dobDataGridColumn" Binding="{Binding DOB,StringFormat={}\{0:dd/MM/yyyy\}}"  Header="DOB" Width="70*"/>
       </DataGrid.Columns>
    </DataGrid>
</Grid>

Добавляя новый столбец, я выровнял левую часть кнопкис левой стороны столбца заголовка в DataGrid.

1 Ответ

2 голосов
/ 12 июля 2011

Используйте привязку, чтобы привязать ширину столбцов таблицы к размеру столбцов в вашей DataGrid. Например:

<dg:DataGridTextColumn x:Name="FirstColumn" Header="Text"/>

<ColumnDefinition Width="{Binding ElementName=FirstColumn, Path=ActualWidth}"/>
...