If you have a RadComboBox inside a ControlPanelItem, when you open the RadComboBox's dropdown and select an item, the ControlPanelItem is not closed. As a workaround, you can manually capture the mouse. Please check the attached project.
As a workaround, the Path with the PathGeometry setter in the style can be replaced by a RadGlyph with a pin icon. The IsPinned Trigger in the style can be replaced with a DataTrigger to the parent row's IsPinned. Here's an example of the updated style for the Fluent theme: <Style x:Key="GridViewPinButtonStyle" TargetType="grid:GridViewPinButton"> <Setter Property="PathStyle" Value="{StaticResource PinUnpinPathStyle}"/> <Setter Property="Foreground" Value="{telerik1:FluentResource ResourceKey=IconBrush}"/> <Setter Property="MinHeight" Value="28"/> <Setter Property="MinWidth" Value="22"/> <Setter Property="IsBackgroundVisible" Value="False"/> <Setter Property="Command" Value="{x:Static telerik:RadGridViewCommands.TogglePinnedRowState}"/> <Setter Property="CommandParameter" Value="{Binding}"/> <Setter Property="SnapsToDevicePixels" Value="True"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> <Setter Property="VerticalContentAlignment" Value="Stretch"/> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="IsTabStop" Value="False"/> <Setter Property="Padding" Value="0 0 2 0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="telerik:RadPathButton"> <Grid Background="Transparent"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="BackgroundVisibility"> <VisualState x:Name="BackgroundIsHidden"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterBorder" Storyboard.TargetProperty="Visibility"> <DiscreteObjectKeyFrame KeyTime="0"> <DiscreteObjectKeyFrame.Value> <Visibility>Collapsed</Visibility> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="BackgroundIsVisible"/> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Border x:Name="OuterBorder" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="{TemplateBinding CornerRadius}"/> <telerik:RadGlyph x:Name="UnPinIcon" Foreground="{TemplateBinding Foreground}" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" Glyph="{StaticResource GlyphPin}"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Foreground" Value="{telerik1:FluentResource ResourceKey=AccentMouseOverBrush}"/> </Trigger> <Trigger Property="IsPressed" Value="True"> <Setter Property="Foreground" Value="{telerik1:FluentResource ResourceKey=AccentPressedBrush}"/> </Trigger> <DataTrigger Binding="{Binding IsPinned, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" Value="True"> <Setter TargetName="UnPinIcon" Property="Glyph" Value="{StaticResource GlyphUnpin}" /> </DataTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> ArgumentException: 'RadGlyphExtension' is not valid for Setter.Value. The only supported MarkupExtension types are DynamicResourceExtension and BindingBase or derived types. StackTrace: at System.Windows.Setter.Seal() at System.Windows.SetterBaseCollection.Seal() at System.Windows.Style.Seal() at System.Windows.Style.Seal() at System.Windows.StyleHelper.UpdateStyleCache(FrameworkElement fe, FrameworkContentElement fce, Style oldStyle, Style newStyle, Style& styleCache) at System.Windows.FrameworkElement.OnStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue) at System.Windows.FrameworkElement.UpdateStyleProperty() at System.Windows.FrameworkElement.OnInitialized(EventArgs e) at Telerik.Windows.Controls.RadButton.OnInitialized(EventArgs e) at Telerik.Windows.Controls.RadPathButton.OnInitialized(EventArgs e) at Telerik.Windows.Controls.GridView.GridViewPinButton.OnInitialized(EventArgs e) at System.Windows.FrameworkElement.TryFireInitialized() at System.Windows.FrameworkElement.EndInit() at MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(XamlType xamlType, Object obj, Boolean begin)
Bind a grid to a DataView
Start editing and change the values of a few cells.
Press Escape twice to cancel the edit of the entire row.
Expected: the values return to the old values
Actual: the values remain the last entered ones
Empty cells appear when the RadGridView contains many cells in the viewport and the view gets resized.
To work this around you can extract and modify the ControlTemplate of GridViewCell, in order to set the MinHeight property of the "PART_ContentPresenter" element to a number close to the RowHeight of the RadGridView control.
The height of the column footer is not updated properly to autofit the footer's content. Actually, this works when the footer content becomes bigger than the current (or the default) value, but if you change the content with a smaller one, the bigger height remains. In other words, the footer height autofits when the content becomes bigger but it doesn't decrease when the content becomes smaller after that.
To work this around, you can subscribe to the CellLoaded event and use reflection to update one of the internal properties of the panel that draws the footer cells.private void gridView_CellLoaded(object sender, CellEventArgs e)
{
if (e.Cell is GridViewFooterCell)
{
var row = e.Cell.ParentRow;
Dispatcher.BeginInvoke(new Action(() =>
{
var aggregatesList = row.ChildrenOfType<AggregateResultsList>(); // the exact type of children that should be used to get the new height may vary based on your column Footer contents
if (aggregatesList.Count() > 0)
{
var height = aggregatesList.Max(x => x.ActualHeight);
var cellsPanel = e.Cell.ParentOfType<GridViewCellsPanel>();
PropertyInfo minRowHeightProp = cellsPanel.GetType().GetProperty("MinRowHeight", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
object minRowHeightPair = minRowHeightProp.GetValue(cellsPanel);
PropertyInfo heightProp = minRowHeightPair.GetType().GetProperty("Second");
heightProp.SetValue(minRowHeightPair, height);
}
}));
}
}
In the case where some of the columns are hidden and all of the columns' display indexes are changed, applying grouping could result in some of the cells from the columns that have custom CellTemplate to not receive it.
To work this around, you could manually change the widths of the columns by iterating the Columns collection as shown below:
foreach (var column in this.GridView.Columns)
{
GridViewLength length = column.Width;
if (length.IsAbsolute)
{
column.Width = new GridViewLength(length.Value + 0.00001);
}
}
The workaround could be using QueryableCollectionView instead. Still, it does not suggest the exact same functionality as ICollectionView.