以编程方式为GridViewCell添加边框

时间:2018-01-23 15:50:34

标签: c# wpf telerik

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

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;
}

2 个答案:

答案 0 :(得分:1)

由于Telerik class Product < ApplicationRecord ... has_and_belongs_to_many :tags ... end 的默认模板结构,修改单元格边框实际上比设置GridViewCellBorderThickness属性更复杂。

您需要修改控件模板。有关此内容的更多信息,请参阅以下主题。

如何更改单元格样式选择器中的边框颜色: 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

答案 1 :(得分:1)

我认为您最好的选择是更改该列的单元格模板,您甚至可以通过将列的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中定义模板,就像在我的第一个示例中那样,这应该会使代码中的setter产生影响。
如果这仍然不够,那么完全以编程方式定义单元格的模板将是您的下一个最佳选择。如果您需要帮助将XAML翻译成实际代码,请留下评论,但我相信在XAML中做得更好。