2013-10-29 60 views
0

我正在定制一个wpf数据网格,我遇到的问题是我已经在下面的Row样式中设置了RowStyle和RowDetails模板,我只是将Row Background设置为一些橙色渐变刷:Datagrid RowDetailsTemplate Stretch RowBackground渐变画笔

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Setter Property="Background" Value="White" /> 
     <Style.Triggers> 
      ... 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="Height" Value="24" /> 
        <Setter Property="Background"> 
         <Setter.Value> 
          <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" Opacity="0.9"> 
           <GradientStop Color="White" Offset="0.0" /> 
           <GradientStop Color="Orange" Offset="0.2" /> 
           <GradientStop Color="#FF4500" Offset="0.8" /> 
           <GradientStop Color="#EE4000" Offset="0.9"/> 
           <GradientStop Color="White" Offset="1.0" /> 
          </LinearGradientBrush> 
         </Setter.Value> 
        </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

这工作都正常,直到我决定设置RowDetailsTemplate,当其在DataGrid中选择该行,这将导致渐变画笔拉伸到适合现在的详细信息部分,直到你只能看到顶部褪色的橙色。现在我假设这是因为行详细信息模板是行的一部分。
但是,如果有人离开,我会徘徊,我可以阻止这种情况发生?
一个解决方法是设置单元格样式,但是这会导致新问题,例如不是整行被着色,即在网格的末端有一些空的空间,当您设置CellStyle。

回答

0

您可以在RowDetailsTemplate中明确设置ContentControl的背景颜色。

<DataGrid.RowDetailsTemplate>   <DataTemplate> 
       <Border Name="RowDetailsTemplateBorder" BorderBrush="#3B73B9" BorderThickness="2" Margin="1" > 
       <Grid Name="RowDetailsTemplateGrid" Height="180" Background="White"> 
          <Image Height="100" Source="{Binding Image}" /> 
    </Grid> 
       </Border> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
+0

然而,我之前试过,它只能部分解决问题,因为行的渐变刷仍然伸展,现在发生的所有情况是,网格将具有不同的彩色背景。换句话说,在行本身,你仍然只能看到拉伸的颜色。 – Heinrich

+0

我在我的测试应用程序中尝试了相同的方法,它按照您的期望工作。我有RowDetailTemplateSelector类,用于为各种类型的数据行定义模板并为模板分配了特定的颜色。除此之外,我还有Datagrid RowStyle,其中我添加了触发器,用于在某些属性为true时更改行背景颜色。 –

+0

但是,您是否使用渐变画笔进行了尝试,如果您使用单一颜色的外观很好,那么当您使用渐变画笔发现问题时 – Heinrich