2011-08-11 198 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