我需要在数据网格中的列上方放置一个复选框,并使该复选框与该列的左边缘对齐,即使用户调整了列的大小(或重新排序)也是如此。
将复选框放在列标题中可能不是一个选择。
第一个挑战是要知道用户何时调整列的大小。
有一个ColumnHeaderDragStarted事件,但是我认为当用户拖动列标题以对其重新排序时会引发该事件。它也适用于列调整大小操作吗?
下一个挑战是在移动列时重新放置复选框。如何以w / r / t相对于包含网格的左边缘确定列左边缘的位置(例如“ Val1”)?我怀疑如果可以确定该值,则可以将其用于放置复选框。
感谢您对此问题的任何见解-
更新2
这个xaml提供了许多所需的行为,但是对齐方式不正确。如果用户在“ Id”和“ Val1”之间移动分隔符,则复选框会移动。
但是,目标是使复选框保持在“ Id”上方对齐;仅当“名称”和“ Id”之间的分隔符移动时,它才应该移动。
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="32" />
<RowDefinition />
</Grid.RowDefinitions>
<DataGrid x:Name="DataGrid"
Grid.Row="1" Grid.Column="0" />
<Canvas Grid.Row="0" Grid.RowSpan="2" >
<CheckBox Content="Check One"
Canvas.Top="10"
Canvas.Left="{Binding Columns[1].ActualWidth, ElementName=DataGrid}" />
</Canvas
</Grid>
更新:
这似乎是一种有用的方法:
https://stackoverflow.com/a/41094009/107037
放置复选框的挑战仍然存在,但是...
由于有人问:
Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="32" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox Content="Check One" Grid.Column="1" />
<CheckBox Content="Check One" Grid.Column="2" />
<DataGrid x:Name="DataGrid"
Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" ></DataGrid>
</Grid>