2011-08-11 140 views
2

我正在使用WPF DataGrid,并将它设置为围绕用户修改的任何行放置红色边框。它可以很好地工作,但是当出现边界时,该行内的所有单元会被推到一个或两个像素上。换句话说,单元的左右边界不再与上面或下面的边界对齐,所以看起来很奇怪。如何在WPF DataGrid上设置边距?

下面是我用得到的红色边框出现OnEdit代码(注:IsDirty是我的绑定对象的属性时的值被修改某个设定):

<Style TargetType="DataGridRow"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsDirty}" Value="true"> 
      <Setter Property="BorderBrush" Value="Red" /> 
      <Setter Property="BorderThickness" Value="1" />      
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

我可以加什么这样我可以修改红色的边界边界,以便它不会干扰单元格的边界?

感谢

回答

2

可视树看起来是这样的

  • DataGridR流
    • 边境
      • DataGridCellsPresenter

当您更改的BorderThicknessBorder您可以通过在同一时间加入负Margin.LeftDataGridCellsPresenter补偿这一点。不是最漂亮的解决方案,但它的工作原理

<DataGrid ...> 
    <DataGrid.Resources> 
     <Style TargetType="DataGridCellsPresenter"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsDirty}" Value="true"> 
        <Setter Property="Margin" Value="-1,0,0,0" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.RowStyle> 
     <Style TargetType="DataGridRow"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding IsDirty}" Value="true"> 
        <Setter Property="BorderBrush" Value="Red" /> 
        <Setter Property="BorderThickness" Value="1" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.RowStyle> 
    <!--...--> 
</DataGrid> 
+0

完美的作品!谢谢......我正在寻找的东西! – Nullqwerty

3

的一种方法是适用边界的每一行,而不是肮脏的之一,但设置边框透明,并设置边框为红色这实际上是脏

喜欢的东西

<Style TargetType="DataGridRow"> 
    <Setter Property="BorderBrush" Value="Transparent" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsDirty}" Value="true"> 
      <Setter Property="BorderBrush" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

好主意。不幸的是,当行不是红色时,这会在所有单元格的边界之间留下间隙。所以左边框是一条线,然后是一个小的空白区域,然后是它下面的边框的一条线。我试图让它变成黑色而不是透明的,但是边框太厚了,所以看起来很疯狂。不过谢谢。 – Nullqwerty