【问题标题】:Datagrid RowDetailsTemplate Stretchs RowBackground Gradient BrushesDatagrid RowDetailsTemplate 拉伸 RowBackground 渐变画笔
【发布时间】:2013-10-29 01:53:13
【问题描述】:

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

<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 中选择行时,它会导致渐变画笔拉伸到现在也适合详细信息部分,直到你只看到褪色的橙色在顶部。现在我假设这种情况正在发生,因为行详细信息模板是行的一部分。
但是,如果有远我可以阻止这种情况发生吗?
一种解决方法是设置单元格样式,但这会导致新问题,例如不是整行都是彩色的,即在网格的末尾有一些空白空间,当您设置单元格样式时,这不会被填充。

【问题讨论】:

    标签: wpf datagrid gradient


    【解决方案1】:

    您可以在 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>
    

    【讨论】:

    • 我之前也尝试过,但是它只能部分解决问题,因为行的渐变画笔仍然是拉伸的,现在发生的只是 Grid 将具有不同的颜色背景。换句话说,在行本身中,您仍然只能看到拉伸的颜色。
    • 我在我的测试应用程序中尝试了相同的方法,它的工作方式符合您的期望。我有 RowDetailTemplateSelector 类来为各种类型的数据行定义模板,并为模板分配了特定的颜色。除此之外,我还有 Datagrid RowStyle,当某些属性为真时,我添加了用于更改行背景颜色的触发器。
    • 但是你用渐变画笔试过了,如果你用单色效果很好,但是当你使用渐变画笔时会出现问题