I am using the RadGridView in conjunction with the filter control for a project. The data in the GridView is readonly. I have the IsReadOnly property set to true. I am using one of the builtin styles (Office_Silver theme) but I am overriding some of the styles because we don't like the way rows and column headers are still being highlighted (turns yellow) when the user's mouse hovers over a row or column. It gives the user a false sense that they are supposed to be able to do something when they can't. Anyhow, when I set the Style property with the overridden style resource the performance of the GridView degrades big time. I have a 2800 row data set that I am loading into the RadGridView control and it takes 3 to 4 minutes to load. If I remove the Style property setting, it is almost instantaneous. The problem is obviously with my styling. Unfortunately, much of WPF's styling still eludes me.
Here is my style:
Here is the XAML for my RadGridView control:
Is there something I am doing wrong? Is there a better way to style the RadGridView so that it is more performant? Is there perhaps a different way to accomplish this?
Thanks for any help that can be provided.
Dustin
Here is my style:
<
Style
x:Key
=
"RadGridViewReadOnlyStyle"
TargetType
=
"{x:Type telerik:RadGridView}"
>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type telerik:RadGridView}"
>
<
AdornerDecorator
>
<
Border
x:Name
=
"PART_MasterGridContainer"
BorderBrush
=
"{TemplateBinding BorderBrush}"
BorderThickness
=
"{TemplateBinding BorderThickness}"
Padding
=
"{TemplateBinding Padding}"
>
<
Grid
x:Name
=
"HierrarchyBackground"
Background
=
"{TemplateBinding Background}"
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
/>
<
ColumnDefinition
x:Name
=
"ScrollBarColumn"
MinWidth
=
"0"
Width
=
"0"
/>
</
Grid.ColumnDefinitions
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"Auto"
/>
<
RowDefinition
x:Name
=
"PART_AttachedBehaviorRow"
Height
=
"Auto"
/>
<
RowDefinition
/>
<
RowDefinition
x:Name
=
"ScrollBarRow"
Height
=
"0"
MinHeight
=
"0"
/>
<
RowDefinition
Height
=
"Auto"
/>
</
Grid.RowDefinitions
>
<
telerik:GridViewGroupPanel
x:Name
=
"PART_GroupPanel"
BorderBrush
=
"#FF848484"
Background
=
"{TemplateBinding GroupPanelBackground}"
Grid.ColumnSpan
=
"2"
Foreground
=
"{TemplateBinding GroupPanelForeground}"
IsTabStop
=
"False"
Grid.Row
=
"0"
>
<
telerik:StyleManager.Theme
>
<
telerik:Office_BlackTheme
/>
</
telerik:StyleManager.Theme
>
</
telerik:GridViewGroupPanel
>
<
telerik:GridViewScrollViewer
x:Name
=
"PART_ItemsScrollViewer"
Background
=
"Transparent"
CanContentScroll
=
"True"
Grid.ColumnSpan
=
"2"
Grid.Row
=
"2"
Grid.RowSpan
=
"2"
>
<
telerik:GridViewScrollViewer.FooterRow
>
<
telerik:GridViewFooterRow
x:Name
=
"PART_FooterRow"
IsTabStop
=
"False"
IndentLevel
=
"{TemplateBinding GroupCount}"
>
<
telerik:StyleManager.Theme
>
<
telerik:Office_BlackTheme
/>
</
telerik:StyleManager.Theme
>
</
telerik:GridViewFooterRow
>
</
telerik:GridViewScrollViewer.FooterRow
>
<
telerik:GridViewScrollViewer.HeaderRow
>
<
telerik:GridViewHeaderRow
x:Name
=
"PART_HeaderRow"
IsTabStop
=
"False"
IndentLevel
=
"{TemplateBinding GroupCount}"
>
<
telerik:StyleManager.Theme
>
<
telerik:Office_BlackTheme
/>
</
telerik:StyleManager.Theme
>
</
telerik:GridViewHeaderRow
>
</
telerik:GridViewScrollViewer.HeaderRow
>
<
telerik:GridViewScrollViewer.NewRow
>
<
telerik:GridViewNewRow
x:Name
=
"PART_AddNewRow"
IsTabStop
=
"False"
IndentLevel
=
"{TemplateBinding GroupCount}"
Visibility
=
"Collapsed"
>
<
telerik:StyleManager.Theme
>
<
telerik:Office_BlackTheme
/>
</
telerik:StyleManager.Theme
>
</
telerik:GridViewNewRow
>
</
telerik:GridViewScrollViewer.NewRow
>
<
telerik:StyleManager.Theme
>
<
telerik:Office_BlackTheme
/>
</
telerik:StyleManager.Theme
>
<
Grid
>
<
telerik:GridViewVirtualizingPanel
x:Name
=
"PART_GridViewVirtualizingPanel"
/>
<
Label
></
Label
>
</
Grid
>
</
telerik:GridViewScrollViewer
>
<
telerik:ScrollPositionIndicator
x:Name
=
"PART_ScrollPositionIndicator"
Grid.ColumnSpan
=
"2"
ContentTemplate
=
"{TemplateBinding ScrollPositionIndicatorTemplate}"
HorizontalAlignment
=
"Right"
IsHitTestVisible
=
"False"
IsTabStop
=
"False"
Margin
=
"0,0,28,0"
Grid.Row
=
"2"
>
<
telerik:StyleManager.Theme
>
<
telerik:Office_BlackTheme
/>
</
telerik:StyleManager.Theme
>
<
telerik:ScrollPositionIndicator.Visibility
>
<
Binding
Mode
=
"TwoWay"
Path
=
"IsScrolling"
RelativeSource
=
"{RelativeSource TemplatedParent}"
>
<
Binding.Converter
>
<
telerik:BooleanToVisibilityConverter
/>
</
Binding.Converter
>
</
Binding
>
</
telerik:ScrollPositionIndicator.Visibility
>
</
telerik:ScrollPositionIndicator
>
<
Border
x:Name
=
"PART_FrozenColumnsPreview"
Background
=
"#33000000"
HorizontalAlignment
=
"Left"
Grid.Row
=
"1"
Grid.RowSpan
=
"4"
Visibility
=
"Collapsed"
VerticalAlignment
=
"Stretch"
Width
=
"6"
/>
<
telerik:GridViewLoadingIndicator
x:Name
=
"PART_GridViewLoadingIndicator"
Grid.ColumnSpan
=
"2"
IsTabStop
=
"False"
Grid.RowSpan
=
"4"
Visibility
=
"Collapsed"
>
<
telerik:StyleManager.Theme
>
<
telerik:Office_BlackTheme
/>
</
telerik:StyleManager.Theme
>
</
telerik:GridViewLoadingIndicator
>
<
Rectangle
x:Name
=
"Background_Disabled"
Grid.ColumnSpan
=
"2"
IsHitTestVisible
=
"False"
Grid.RowSpan
=
"5"
Visibility
=
"Collapsed"
>
<
Rectangle.Fill
>
<
LinearGradientBrush
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#E5000000"
/>
<
GradientStop
Color
=
"#E5000000"
Offset
=
"1"
/>
<
GradientStop
Color
=
"#4C000000"
Offset
=
"0.5"
/>
</
LinearGradientBrush
>
</
Rectangle.Fill
>
</
Rectangle
>
</
Grid
>
</
Border
>
</
AdornerDecorator
>
<
ControlTemplate.Triggers
>
<
Trigger
Property
=
"IsBusy"
Value
=
"True"
>
<
Setter
Property
=
"Visibility"
TargetName
=
"PART_GridViewLoadingIndicator"
Value
=
"Visible"
/>
</
Trigger
>
<
Trigger
Property
=
"IsBusy"
Value
=
"False"
>
<
Setter
Property
=
"Visibility"
TargetName
=
"PART_GridViewLoadingIndicator"
Value
=
"Collapsed"
/>
</
Trigger
>
<
Trigger
Property
=
"IsEnabled"
Value
=
"False"
>
<
Setter
Property
=
"Visibility"
TargetName
=
"Background_Disabled"
Value
=
"Visible"
/>
</
Trigger
>
<
Trigger
Property
=
"ShowColumnFooters"
Value
=
"False"
>
<
Setter
Property
=
"Visibility"
TargetName
=
"PART_FooterRow"
Value
=
"Collapsed"
/>
</
Trigger
>
<
Trigger
Property
=
"ShowColumnHeaders"
Value
=
"False"
>
<
Setter
Property
=
"Visibility"
TargetName
=
"PART_HeaderRow"
Value
=
"Collapsed"
/>
</
Trigger
>
<
Trigger
Property
=
"ShowGroupPanel"
Value
=
"False"
>
<
Setter
Property
=
"Visibility"
TargetName
=
"PART_GroupPanel"
Value
=
"Collapsed"
/>
</
Trigger
>
<
Trigger
Property
=
"ComputedVerticalScrollBarVisibility"
SourceName
=
"PART_ItemsScrollViewer"
Value
=
"Collapsed"
>
<
Setter
Property
=
"Width"
TargetName
=
"ScrollBarColumn"
Value
=
"0"
/>
</
Trigger
>
<
Trigger
Property
=
"ComputedHorizontalScrollBarVisibility"
SourceName
=
"PART_ItemsScrollViewer"
Value
=
"Collapsed"
>
<
Setter
Property
=
"Height"
TargetName
=
"ScrollBarRow"
Value
=
"0"
/>
<
Setter
Property
=
"Grid.RowSpan"
TargetName
=
"PART_ItemsScrollViewer"
Value
=
"1"
/>
</
Trigger
>
<
Trigger
Property
=
"ShowInsertRow"
Value
=
"True"
>
<
Setter
Property
=
"Visibility"
TargetName
=
"PART_AddNewRow"
Value
=
"Visible"
/>
</
Trigger
>
</
ControlTemplate.Triggers
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
<
Setter
Property
=
"Background"
Value
=
"White"
/>
<
Setter
Property
=
"BorderBrush"
Value
=
"#FF848484"
/>
<
Setter
Property
=
"Foreground"
Value
=
"Black"
/>
<
Setter
Property
=
"BorderThickness"
Value
=
"1"
/>
<
Setter
Property
=
"AlternateRowBackground"
Value
=
"#FFF4F4F4"
/>
<
Setter
Property
=
"VerticalGridLinesBrush"
Value
=
"#FFCBCBCB"
/>
<
Setter
Property
=
"HorizontalGridLinesBrush"
Value
=
"#FFCBCBCB"
/>
<
Setter
Property
=
"GroupPanelBackground"
>
<
Setter.Value
>
<
LinearGradientBrush
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FFDFDFDF"
Offset
=
"1"
/>
<
GradientStop
Color
=
"#FFBABABA"
/>
</
LinearGradientBrush
>
</
Setter.Value
>
</
Setter
>
<
Setter
Property
=
"GroupPanelForeground"
Value
=
"Black"
/>
<
Setter
Property
=
"ScrollViewer.HorizontalScrollBarVisibility"
Value
=
"Auto"
/>
<
Setter
Property
=
"ScrollViewer.VerticalScrollBarVisibility"
Value
=
"Auto"
/>
<
Setter
Property
=
"VerticalAlignment"
Value
=
"Stretch"
/>
<
Setter
Property
=
"HorizontalAlignment"
Value
=
"Stretch"
/>
<
Setter
Property
=
"SnapsToDevicePixels"
Value
=
"True"
/>
</
Style
>
Here is the XAML for my RadGridView control:
<
telerikGV:RadGridView
Name
=
"DocLogFilterGridView"
CanUserFreezeColumns
=
"False"
CanUserReorderColumns
=
"True"
CanUserResizeColumns
=
"True"
CanUserSortColumns
=
"False"
IsFilteringAllowed
=
"True"
IsReadOnly
=
"True"
ShowGroupPanel
=
"False"
CanUserDeleteRows
=
"False"
CanUserInsertRows
=
"False"
CanUserSelect
=
"False"
RowIndicatorVisibility
=
"Collapsed"
ColumnReordered
=
"DocLogFilterGridView_ColumnReordered"
ColumnWidthChanged
=
"DocLogFilterGridView_ColumnWidthChanged"
AutoGeneratingColumn
=
"DocLogFilterGridView_AutoGeneratingColumn"
DataLoaded
=
"DocLogFilterGridView_DataLoaded"
ColumnReordering
=
"DocLogFilterGridView_ColumnReordering"
ColumnWidthChanging
=
"DocLogFilterGridView_ColumnWidthChanging"
Filtered
=
"DocLogFilterGridView_Filtered"
SizeChanged
=
"DocLogFilterGridView_SizeChanged"
SelectionChanging
=
"DocLogFilterGridView_SelectionChanging"
telerik:StyleManager.Theme
=
"Office_Silver" Style="{DynamicResource RadGridViewReadOnlyStyle}"
Loaded
=
"DocLogFilterGridView_Loaded"
EnableColumnVirtualization
=
"True"
EnableRowVirtualization
=
"True"
>
</
telerikGV:RadGridView
>
Is there something I am doing wrong? Is there a better way to style the RadGridView so that it is more performant? Is there perhaps a different way to accomplish this?
Thanks for any help that can be provided.
Dustin