NullReferenceException is thrown when you click a non-frozen cell to start the row edit and RadDataGrid has frozen columns. To reproduce this, the UserEditMode should be set to Inline and at least one of the frozen columns should be read-only (CanUserEdit = False).
The stacktrace of the exception is:
Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.XamlGridEditCellGenerator.GenerateContainerForItem(Telerik.UI.Xaml.Controls.Grid.CellGenerationContext info, object containerType) Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.CellEditorModelGenerator.GenerateContainerForItem(Telerik.UI.Xaml.Controls.Grid.CellGenerationContext context, object containerType) Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.ItemModelGenerator<Telerik.UI.Xaml.Controls.Grid.GridCellEditorModel, Telerik.UI.Xaml.Controls.Grid.CellGenerationContext>.GenerateContainer(Telerik.UI.Xaml.Controls.Grid.CellGenerationContext context) Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.CellsController<Telerik.UI.Xaml.Controls.Grid.GridCellEditorModel>.GetCellDecorator(Telerik.UI.Xaml.Controls.Grid.IItemInfoNode parentRow, Telerik.Data.Core.Layouts.ItemInfo columnItemInfo, int rowLine, int columnLine)
Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.CellsController<Telerik.UI.Xaml.Controls.Grid.GridCellEditorModel>.GenerateCellsForRow(Telerik.UI.Xaml.Controls.Grid.IItemInfoNode rowDecorator, int rowSlot)
Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.Model.GridModel.GenerateCellsForEditRow(int rowSlot, double largestRowElementWidth, Telerik.UI.Xaml.Controls.Grid.IItemInfoNode rowDecorator) Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.Model.GridModel.Telerik.UI.Xaml.Controls.Grid.ITable.GenerateCellsForRow(int rowSlot, double largestRowElementHeight, Telerik.UI.Xaml.Controls.Grid.IItemInfoNode rowDecorator) Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.EditRowPool.UpdateEditRow(Telerik.Data.Core.Layouts.ItemInfo info, Windows.Foundation.Point startPosition, bool hasFrozenColumns)
Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.Model.GridModel.UpdateEditRow() Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.Model.GridModel.ArrangeCells(Windows.Foundation.Size finalSize) Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.RadDataGrid.OnCellsPanelArrange(Windows.Foundation.Size finalSize) Telerik.WinUI.Controls.dll!Telerik.UI.Xaml.Controls.Grid.Primitives.DataGridCellsPanel.ArrangeOverride(Windows.Foundation.Size finalSize)
The MessageResultEventArgs' DataObjectResult property is empty when the ReportMessageResult event is raised for the SelectedItems property. The SelectedItems property is reported when the event is raised for a ListMessage with multiple selection enabled.
To work this around, instead of the DataObjectResult property, use the SelectedItems of the ListView control which presents the items in the ListMessage.
private void RadChat_ReportMessageResult(object sender, MessageResultEventArgs e)
{
if (e.Message is ListMessage lm && e.PropertyName == nameof(ListView.SelectedItems))
{
var listView = this.chat.ChildrenOfType<ListView>().FirstOrDefault(x => x.DataContext == e.Message);
if (listView != null)
{
IList<object> selection = listView.SelectedItems;
}
}
}
The Telerik UI for WinUI Desktop Examples installation fails when using the .appinstaller downloaded from here: https://demos.telerik.com/winui/
Scrolling with the mouse wheel scrolls directly to the bottom of the messages instead of scrolling smoothly between the items.
To work this around, create a custom class that derives from RadChat and override its OnPointerWheelChanged method.
public class CustomChat : RadChat
{
private ScrollViewer scrollViewer;
internal ScrollViewer ScrollViewer
{
get
{
if (this.scrollViewer == null)
{
this.scrollViewer = this.ChildrenOfType<ScrollViewer>().Where(sc => sc.Name == "PART_ScrollViewer").FirstOrDefault();
}
return this.scrollViewer;
}
}
protected override void OnPointerWheelChanged(PointerRoutedEventArgs e)
{
if (this.ScrollViewer != null)
{
int delta = e.GetCurrentPoint(this).Properties.MouseWheelDelta;
double wheelDetents = delta / 120.0;
double scrollableRange = ScrollViewer.ExtentHeight - ScrollViewer.ViewportHeight;
double step = 0.01 * scrollableRange;
double offsetDelta = wheelDetents * step;
double newOffset = ScrollViewer.VerticalOffset - offsetDelta;
newOffset = Math.Max(0, Math.Min(ScrollViewer.ExtentHeight, newOffset));
ScrollViewer.ScrollToVerticalOffset(newOffset);
}
}
}
Since Q2 2025, user defined Dark/Light/HighContrastResourcesPaths do not work - the custom resources are anot applied to the controls.
/// <summary>
/// Resource loader that provides the resource dictionaries with the brushes for the Telerik controls.
/// See https://docs.telerik.com/devtools/universal-windows-platform/common/teleriknamedbrushes.
/// </summary>
public sealed class TelerikResourceLoader : CustomXamlResourceLoader
{
/// <inheritdoc/>
protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType)
{
object result;
if (resourceId == "DarkResourcesPath")
{
result = new Uri("ms-appx:///{ProjectName}/Assets/Themes/Dark_Telerik.xaml");
}
else if (
resourceId == "LightResourcesPath" ||
resourceId == "HighContrastResourcesPath")
{
result = new Uri("ms-appx:///{ProjectName}/Assets/Themes/Light_Telerik.xaml");
}
else
{
result = null;
}
return result;
}
}
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<SolidColorBrush x:Key="TelerikGrid_BackgroundPointerOver" Color="Red" Opacity="0.25"/>
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="TelerikGrid_BackgroundPointerOver" Color="Green" Opacity="0.25"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
Edit - indeed the Light/Dark/ResourcePaths are deleted from the generic files of telerk controls due to the following regression in WinUI App SDK 1.7.25:
https://github.com/microsoft/microsoft-ui-xaml/issues/10506
This is the same feature as the "FilterRow" FilteringMode setting of RadGridView for WPF.