I am using a custom row template to style the layout of my gridview. Is there a way to set the alternating background colors?
I tried setting the AlternateRowBackground, but when I set the AlternationCount=2 makes every second row not use the template.
Regards
Murray
8 Answers, 1 is accepted
You should set these properties on a grid level, not on a row level:
<
UserControl.Resources
>
<
Style
TargetType
=
"telerik:RadGridView"
>
<
Setter
Property
=
"AlternateRowBackground"
Value
=
"Red"
/>
<
Setter
Property
=
"AlternationCount"
Value
=
"3"
/>
</
Style
>
</
UserControl.Resources
>
<
Grid
x:Name
=
"LayoutRoot"
Background
=
"White"
DataContext
=
"{Binding Source={StaticResource SampleDataSource}}"
>
<
telerik:RadGridView
Margin
=
"72,32,64,144"
ItemsSource
=
"{Binding Collection}"
/>
If you need any further assistance do not hesitate to contact us!
Best wishes,
Vanya Pavlova
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>
Here is a sample of my code:
<
LinearGradientBrush
x:Key
=
"Windows7RowBackground"
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#001D1D1D"
/>
<
GradientStop
Color
=
"#00333333"
Offset
=
"1"
/>
</
LinearGradientBrush
>
<
LinearGradientBrush
x:Key
=
"ItemBackground_Selected"
EndPoint
=
"0.499,0"
StartPoint
=
"0.501,1"
>
<
GradientStop
Color
=
"#FF3f3f3f"
Offset
=
"0"
/>
<
GradientStop
Color
=
"#FF515151"
Offset
=
"1"
/>
</
LinearGradientBrush
>
<
ControlTemplate
x:Key
=
"CustomRowTemplate"
TargetType
=
"telerik:GridViewRow"
>
<
Border
x:Name
=
"rowsContainer"
BorderBrush
=
"#FFC6C6C6"
BorderThickness
=
"0,0,0,1"
HorizontalAlignment
=
"Stretch"
VerticalAlignment
=
"Top"
Background
=
"{StaticResource Windows7RowBackground}"
>
<
VisualStateManager.VisualStateGroups
>
<
VisualStateGroup
x:Name
=
"CommonStates"
>
<
VisualState
x:Name
=
"Normal"
/>
<
VisualState
x:Name
=
"Selected"
>
<
Storyboard
>
<
ObjectAnimationUsingKeyFrames
Duration
=
"0"
Storyboard.TargetProperty
=
"Background"
Storyboard.TargetName
=
"rowsContainer"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
Value
=
"{StaticResource ItemBackground_Selected}"
/>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
</
VisualStateGroup
>
</
VisualStateManager.VisualStateGroups
>
<
Grid
Margin
=
"10,0,10,4"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"0"
/>
<
RowDefinition
Height
=
"1*"
/>
<
RowDefinition
Height
=
"1*"
/>
<
RowDefinition
Height
=
"1*"
/>
<
RowDefinition
Height
=
"1*"
/>
<
RowDefinition
Height
=
"1*"
/>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"20"
/>
<
ColumnDefinition
Width
=
"100"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"0"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"0"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"0"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"0"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"130"
/>
<
ColumnDefinition
Width
=
"0"
/>
<
ColumnDefinition
Width
=
"78"
/>
<
ColumnDefinition
Width
=
"130"
/>
</
Grid.ColumnDefinitions
>
<
CheckBox
Grid.RowSpan
=
"5"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Left"
IsChecked
=
"{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
/>
<
Grid
Margin
=
"5"
VerticalAlignment
=
"Center"
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
Height
=
"Auto"
/>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"Auto"
/>
<
ColumnDefinition
Width
=
"Auto"
/>
</
Grid.ColumnDefinitions
>
<
RadioButton
Grid.Row
=
"0"
Grid.Column
=
"0"
GroupName
=
"{Binding Id}"
Margin
=
"0,0,0,5"
>
</
RadioButton
>
<
TextBlock
Grid.Row
=
"0"
Grid.Column
=
"1"
>
</
TextBlock
>
<
RadioButton
Grid.Row
=
"1"
Grid.Column
=
"0"
GroupName
=
"{Binding Id}"
Margin
=
"0,0,0,5"
>
</
RadioButton
>
<
TextBlock
Grid.Row
=
"1"
Grid.Column
=
"1"
>
</
TextBlock
>
<
RadioButton
Grid.Row
=
"2"
Grid.Column
=
"0"
GroupName
=
"{Binding Id}"
>
</
RadioButton
>
<
TextBlock
Grid.Row
=
"2"
Grid.Column
=
"1"
>
</
TextBlock
>
<
TextBlock
Grid.Row
=
"3"
Grid.ColumnSpan
=
"2"
Margin
=
"0,5,0,0"
TextWrapping
=
"Wrap"
Width
=
"80"
Text
=
""
/>
</
Grid
>
</
Border
>
<
Border
Grid.Column
=
"2"
Grid.Row
=
"1"
>
<
TextBlock
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Left"
>
</
TextBlock
>
</
Border
>
<
Border
Grid.Column
=
"3"
Grid.Row
=
"1"
>
<
TextBlock
Text
=
""
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Left"
TextWrapping
=
"Wrap"
/>
</
Border
>
<
Border
Grid.Row
=
"2"
Grid.Column
=
"2"
>
<
TextBlock
HorizontalAlignment
=
"Left"
VerticalAlignment
=
"Center"
>
</
TextBlock
>
</
Border
>
<
Border
Grid.Row
=
"2"
Grid.Column
=
"3"
>
<
TextBlock
Text
=
""
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Left"
TextWrapping
=
"Wrap"
/>
</
Border
>
<
Border
Grid.Row
=
"3"
Grid.Column
=
"2"
>
<
TextBlock
HorizontalAlignment
=
"Left"
VerticalAlignment
=
"Center"
>
</
TextBlock
>
</
Border
>
</
Grid
>
</
Border
>
</
ControlTemplate
>
<
Style
x:Key
=
"rowStyle"
TargetType
=
"telerik:GridViewRow"
>
<
Setter
Property
=
"Template"
Value
=
"{StaticResource CustomRowTemplate}"
/>
</
Style
>
<
telerik:RadGridView
ItemsSource
=
"{Binding xxxx}"
SelectedItem
=
"{Binding xxxx, Mode=TwoWay}"
Behaviors:RadGridViewBehavior.GridManager
=
"{Binding GridManager}"
RowIndicatorVisibility
=
"Collapsed"
RowStyle
=
"{StaticResource rowStyle}"
Style
=
"{StaticResource Control_ResultsGrid}"
AutoGenerateColumns
=
"False"
BorderBrush
=
"{StaticResource ControlOuterBorder_Normal}"
>
Thank you for sharing this snippet with us! You have created a custom row layout for a RadGridView control and as fas I can see from the snippets you have missed to set the AlternateRowBackground/AlternationCount properties of RadGridView to an appropriate values. By default alternated rows are desgined to work with a plain GridViewRow, not with a custom one. Even if you set these properties in a custom row layout scenario you may see the result at the attached picture.
Vanya Pavlova
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>
In a custom row layout scenario everything is custom and build by your side. RadGridView internally "does not know" anything about this custom layout and how to set this AlternateRowBackground, because it is designed to work with plain GridViewRow. Unfortunately you cannot use alternated rows in a custom row layout scenario.
Vanya Pavlova
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>
Sample Project
Is there a better way than having to replicate the whole template? My project template is huge and having two versions will become unmanagable.
Thank you for getting back to us! Indeed the mentioned solution is a great one and I believe that this is the best approach in such case. GridViewRow is an element, which is not much different than any other control with a predefined template. AlternateRowBackground/AlternationCount are properties of RadGridView and by that reason you get an ordinary row. Indeed the approach using AlternateRowStyle similar to the default one is the easiest possible solution.
If you need any further assistance do not hesitate to contact us!
Vanya Pavlova
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>
In the template I bound the background to the templatedParent
Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}"
Then moved the background color to the style
<
LinearGradientBrush
x:Key
=
"Windows7RowBackground"
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FF1D1D1D"
/>
<
GradientStop
Color
=
"#FF333333"
Offset
=
"1"
/>
</
LinearGradientBrush
>
<
LinearGradientBrush
x:Key
=
"Windows7RowBackground2"
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FF414141"
/>
<
GradientStop
Color
=
"#FF3B3B3B"
Offset
=
"1"
/>
</
LinearGradientBrush
>
<
Style
x:Key
=
"rowStyle"
TargetType
=
"telerik:GridViewRow"
>
<
Setter
Property
=
"Template"
Value
=
"{StaticResource CustomRowTemplate}"
/>
<
Setter
Property
=
"Background"
Value
=
"{StaticResource Windows7RowBackground}"
/>
</
Style
>
<!--Alternate-->
<
Style
x:Key
=
"rowStyle2"
TargetType
=
"telerik:GridViewRow"
>
<
Setter
Property
=
"Template"
Value
=
"{StaticResource CustomRowTemplate}"
/>
<
Setter
Property
=
"Background"
Value
=
"{StaticResource Windows7RowBackground2}"
/>
</
Style
>
<
telerik:RadGridView
x:Name
=
"playersGrid"
RowStyle
=
"{StaticResource rowStyle}"
AlternateRowStyle
=
"{StaticResource rowStyle2}"
AlternationCount
=
"2"
RowIndicatorVisibility
=
"Collapsed"
AutoGenerateColumns
=
"False"
AutoExpandGroups
=
"True"
ShowColumnHeaders
=
"False"
Margin
=
"8,31,8,0"
Height
=
"441"
VerticalAlignment
=
"Top"
>
Cheers