WPF DataGrid:调整列的大小

Dia*_*ana 3 .net wpf datagrid resize wpfdatagrid

我有一个System.Windows.Controls.DataGrid,其属性CanUserResizeColumns分配给True.现在,我可以通过使用鼠标左键单击2列标题来调整列的宽度.

但我还希望能够更改dataGrid的任何行中的列的宽度,而不仅仅是在列标题中.可能吗?

WPF*_*-it 5

在您的dataGrid中,您可以使用DataGridTemplatealvern列GridSplitter来实现此目的.

 <toolkit:DataGridTemplateColumn Header="Text" >
     <toolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
           <Grid>
              <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition  Width="Auto"/>
              </Grid.ColumnDefinitions>
              <TextBlock Text="{Binding Text}"/>
              <GridSplitter Grid.Column="1" Width="3"
                            DragIncrement="1"
                            DragDelta="GridSplitter_DragDelta"
                            Tag="{Binding BindsDirectlyToSource=True,
                                    RelativeSource={RelativeSource
                                      AncestorType={x:Type toolkit:DataGridCell}}}"/>
           </Grid>
        </DataTemplate>
     </toolkit:DataGridTemplateColumn.CellTemplate>
 </toolkit:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

然后在你的代码后面......做这个......

    private void GridSplitter_DragDelta(
         object sender,
         System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    {
        var gridSplitter = sender as GridSplitter;

        if (gridSplitter != null)
        {
            ((DataGridCell) gridSplitter.Tag).Column.Width
                = ((DataGridCell) gridSplitter.Tag).Column.ActualWidth +
                  e.HorizontalChange;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这样,单个单元级别的GridSplitter可以调整其整个列的大小.

如果您使用的是MVVM,则应将上述事件处理程序置于附加行为中