以编程方式为 GridViewCell 添加边框

Adding Border for GridViewCell Programmatically

我正在尝试以编程方式在特定列周围添加粗边框。我可以使用相同的方法更改 Background 属性,但边框 属性 无论如何都不会更改。

if (eligibleProperties.Contains(column.Header.ToString()))
{
    Setter s1 = new Setter(GridViewCell.BorderThicknessProperty, new Thickness(7));
    Setter s2 = new Setter(BorderBrushProperty, Brushes.Black);
    Style st = new Style(typeof(GridViewCell));
    st.Setters.Add(s1);
    st.Setters.Add(s2);

    column.CellStyle = st;
}

背景更改的工作代码

if (eligibleProperties.Contains(column.Header.ToString()))
{
    Setter s2 = new Setter(BackgroundProperty, Brushes.Black);
    Style st = new Style(typeof(GridViewCell));
    st.Setters.Add(s2);

    column.CellStyle = st;
}

由于 Telerik 的默认模板结构 GridViewCell,修改单元格边框实际上比仅设置 BorderThicknessBorderBrush 属性更复杂。

您将需要修改控件模板。有关这方面的更多信息,请参阅以下主题。

如何更改单元格样式选择器中的边框颜色: https://www.telerik.com/forums/how-do-i-change-border-color-in-cell-style-selector

更改行边框颜色: https://www.telerik.com/forums/change-the-row-border-colour

我认为最好的办法是更改该列的单元格模板,您甚至可以通过将列的 telerik:GridViewDataColumn.CellStyle 设置为以下内容来即时完成此操作:

<Style TargetType="{x:Type telerik:GridViewCell}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="telerik:GridViewCell">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                    <ContentPresenter  Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" ToolTip="{TemplateBinding ToolTip}" VerticalAlignment="Center" Margin="3,0"/> 
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

现在您的单元格具有可以使用的属性 BorderThicknessBorderBrush。就像下面的这个例子一样,你的单元格周围会有一个红色的粗边框:

<telerik:GridViewDataColumn Header="MyColumn1" DataMemberBinding="{Binding MyColumn1Binding}" Width="150" >
    <telerik:GridViewDataColumn.CellStyle>
        <Style TargetType="{x:Type telerik:GridViewCell}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="telerik:GridViewCell">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                            <ContentPresenter  Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" ToolTip="{TemplateBinding ToolTip}" VerticalAlignment="Center" Margin="3,0"/> 
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Propert="BorderBrush" Value="Red" />
            <Setter Propert="BorderThickness" Value="2,2,2,2" />
        </Style>
    </telerik:GridViewDataColumn.CellStyle>
</telerik:GridViewDataColumn

例如,使用厚度您还可以隐藏顶部和底部边框。在样式中,您还可以使用 Style.Triggers 并根据多个 DataTriggers.

定义不同的边框设置

我相信这比以编程方式添加边框更灵活。但是,如果您真的想在代码中执行此操作,那么您仍然可以像在我的第一个示例中那样在 XAML 中定义模板,这应该使代码中的设置器产生影响。
如果这仍然不够,完全以编程方式定义单元格模板将是您的下一个最佳选择。如果您需要帮助将 XAML 转换为实际代码,请发表评论,尽管我相信在 XAML 中这样做要好得多。