WPF-使复选框与datagrid列对齐

时间:2018-10-04 14:28:17

标签: wpf wpfdatagrid

我需要在数据网格中的列上方放置一个复选框,并使该复选框与该列的左边缘对齐,即使用户调整了列的大小(或重新排序)也是如此。

enter image description here

将复选框放在列标题中可能不是一个选择。
第一个挑战是要知道用户何时调整列的大小。
有一个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>  

0 个答案:

没有答案