【问题标题】:Shared DataGridColumn Widths Across Multiple DataGrids跨多个 DataGrid 共享 DataGridColumn 宽度
【发布时间】:2011-11-08 18:41:29
【问题描述】:

我在应用程序中使用相同的列和绑定集创建多个 DataGrid。我希望做的是让所有 DataGrid 对一个 DataGrid 中的更改做出适当的响应。如果我更改一列的大小,其他 DG 中的相应列应该具有相同的宽度。这有点类似于 S.O. 上的这个问题。 (WPF share column width between separate grids) 除了 DataGrids,不是 Grids。我希望 DataGrids 有一个类似于 Grid 中的 IsSharedSize 的属性,但事实并非如此。

是否有我可以访问的属性或其他方法来完成我想要完成的任务?不过,在有人提出这个建议之前,我无法将它们全部合并到一个 DataGrid 中,我正在尝试的意思是,由于应用程序本身的性质,我不能将所有信息放在一个 DataGrid 中。

【问题讨论】:

    标签: wpf .net-4.0 datagrid


    【解决方案1】:

    虽然在开箱即用的 DataGrid's 中无法共享宽度,但我认为这是处理此类情况的最佳方式。

    在源 DataGrid 列和目标 DataGrid 列宽度之间创建绑定。就我而言,我有两个目标 DataGrid's(dgTarget1 和 dgTarget2),所以这里是代码:

    for (int index = 0; index < dgSource.Columns.Count; index++)
    {
        Binding bindingWidth = new Binding();
        bindingWidth.Mode = BindingMode.TwoWay;
        bindingWidth.Source = dgSource.Columns[index];
        bindingWidth.Path = new PropertyPath(DataGridColumn.WidthProperty);
        BindingOperations.SetBinding(dgTarget1.Columns[index], DataGridColumn.WidthProperty, bindingWidth);
        BindingOperations.SetBinding(dgTarget2.Columns[index], DataGridColumn.WidthProperty, bindingWidth);
    }   
    

    【讨论】:

      【解决方案2】:

      在这个聚会上有点晚了,但我遇到了一个类似的场景,我需要一个 Grid 位于 DataGrid 下方并共享相同的列跨度。您可以仅使用 XAML 实现类似于 digitguy 的答案:

      <DataGrid x:Name="dgOne">
          <DataGrid.Columns>
              <DataGridTextColumn Header="One" />
              <DataGridTextColumn Header="Two" />
              <DataGridTextColumn Header="Three" />
              <DataGridTextColumn Header="Four" />
          </DataGrid.Columns>
      </DataGrid>
      <Grid>
          <Grid.ColumnDefinitions>
              <ColumnDefinition Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" />
              <ColumnDefinition Width="{Binding Columns[1].ActualWidth, ElementName=dgOne}" />
              <ColumnDefinition Width="{Binding Columns[2].ActualWidth, ElementName=dgOne}" />
              <ColumnDefinition Width="{Binding Columns[3].ActualWidth, ElementName=dgOne}" />
          </Grid.ColumnDefinitions>
          ...
      </Grid>
      

      没有理由不能用两个 DataGrid 做同样的事情。

      <DataGrid x:Name="dgOne">
          <DataGrid.Columns>
              <DataGridTextColumn Header="One" />
              <DataGridTextColumn Header="Two" />
              <DataGridTextColumn Header="Three" />
              <DataGridTextColumn Header="Four" />
          </DataGrid.Columns>
      </DataGrid>
      <DataGrid>
          <DataGrid.Columns>
              <DataGridTextColumn Header="One" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" />
              <DataGridTextColumn Header="Two" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" />
              <DataGridTextColumn Header="Three" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" />
              <DataGridTextColumn Header="Four" Width="{Binding Columns[0].ActualWidth, ElementName=dgOne}" />
          </DataGrid.Columns>
      </DataGrid>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        • 2014-01-18
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多