以编程方式为 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
,修改单元格边框实际上比仅设置 BorderThickness
和 BorderBrush
属性更复杂。
您将需要修改控件模板。有关这方面的更多信息,请参阅以下主题。
如何更改单元格样式选择器中的边框颜色: 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>
现在您的单元格具有可以使用的属性 BorderThickness
和 BorderBrush
。就像下面的这个例子一样,你的单元格周围会有一个红色的粗边框:
<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 中这样做要好得多。
我正在尝试以编程方式在特定列周围添加粗边框。我可以使用相同的方法更改 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
,修改单元格边框实际上比仅设置 BorderThickness
和 BorderBrush
属性更复杂。
您将需要修改控件模板。有关这方面的更多信息,请参阅以下主题。
如何更改单元格样式选择器中的边框颜色: 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>
现在您的单元格具有可以使用的属性 BorderThickness
和 BorderBrush
。就像下面的这个例子一样,你的单元格周围会有一个红色的粗边框:
<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 中这样做要好得多。