【问题标题】:SharedSizeGroup on dataGrid数据网格上的 SharedSizeGroup
【发布时间】:2011-07-12 16:27:56
【问题描述】:

我的 WPF 应用程序上有一个 DataGrid 和一个网格,我希望它们受尊重的列大小相同。我想也许我使用 SharedSizeGroup 但似乎 DataGrid 列没有这个属性(我错了吗?)。 我怎样才能做到这一点?

更新1

我将 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 中标题列的左侧对齐。

【问题讨论】:

    标签: wpf wpfdatagrid


    【解决方案1】:

    使用绑定将 Grid 列宽绑定到 DataGrid 中列的大小。例如:

    <dg:DataGridTextColumn x:Name="FirstColumn" Header="Text"/>
    
    <ColumnDefinition Width="{Binding ElementName=FirstColumn, Path=ActualWidth}"/>
    

    【讨论】:

    • 这是一个很好的解决方案,但存在一些小问题。请查看我的更新
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2015-09-28
    • 1970-01-01
    • 2016-06-04
    • 2011-04-21
    相关资源
    最近更新 更多