.Net framework 4.7.2
Telerik WPF Version 2025.1.211.462
When developing an application using Telerik's RadHighlightTextBlock control, I encountered the following issues:
When attempting to dynamically update the control's `Text` and `HighlightText` properties through data binding, the control fails to display the updated content correctly. Specifically:
I have confirmed that:
I suspect this might be an issue with RadHighlightTextBlock's internal update handling mechanism, or it may require specific settings to properly handle dynamic update scenarios.
<Window x:Class="RadHighlightTextBlock_Issue.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:RadHighlightTextBlock_Issue"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<local:MyViewModel x:Key="MyViewModel"/>
</Window.Resources>
<StackPanel>
<telerik:RadHighlightTextBlock x:Name="highlightTextBlock"
Text="{Binding Source={StaticResource MyViewModel}, Path=SelectedItem.Description}"
HighlightText="{Binding Source={StaticResource MyViewModel}, Path=SelectedItem.HighlightText}"
HighlightForeground="Red"
HighlightBackground="Yellow"
FontSize="16"
Margin="10"/>
<telerik:RadButton Content="Content0" Command="{Binding Source={StaticResource MyViewModel}, Path=C0Command}"/>
<telerik:RadButton Content="Content1" Command="{Binding Source={StaticResource MyViewModel}, Path=C1Command}"/>
</StackPanel>
</Window>using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Input;
namespace RadHighlightTextBlock_Issue
{
/// <summary>
/// MainWindow.xaml 的互動邏輯
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void RadButton_Click(object sender, RoutedEventArgs e)
{
highlightTextBlock.Text = "This is a sample text to demonstrate the RadHighlightTextBlock control.";
}
private void RadButton_Click_1(object sender, RoutedEventArgs e)
{
highlightTextBlock.Text = "This is another sample text for the second button.";
}
}
public class MyViewModel : INotifyPropertyChanged
{
public ObservableCollection<DataItem> Items { get; set; }
public MyViewModel()
{
Items = new ObservableCollection<DataItem>
{
new DataItem { HighlightText = "sample", Description = "This is a sample description." },
new DataItem { HighlightText = "second", Description = "This is the second item description." },
new DataItem { HighlightText = "text", Description = "This item contains the word text." }
};
SelectedItem = Items.FirstOrDefault();
}
public ICommand C0Command => new RelayCommand<object>((obj) =>
{
SelectedItem = Items.FirstOrDefault();
});
public ICommand C1Command => new RelayCommand<object>((obj) =>
{
SelectedItem = Items.LastOrDefault();
});
private DataItem _selectedItem;
public DataItem SelectedItem
{
get { return _selectedItem; }
set
{
if (_selectedItem != value)
{
_selectedItem = value;
OnPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class DataItem
{
public string HighlightText { get; set; }
public string Description { get; set; }
}
/*Implement RelayCommand...*/
}
Issues when using IsGroupHeadersVirtualizationEnabled=true in timeline mode with different-sized resources:
- Drag&Drop of appointments ends up in the wrong place. The drop preview is also displayed incorrectly on the wrong "resource".The UI is not updated when an item is replaced in the bound ListCollectionView.
Workaround: Remove the item and add a new one.
Multiple operations applied on a big RadBitmap can cause OutOfMemoryException because of used and not disposed unmanaged resources in a WriteableBitmap object. Steps to reproduce: - Execute multiple times the Rotate tool Observe: The memory goes up and retains such. Expected: The unmanaged memory is cleared. Findings: the memory leak is related to the WPF class WriteableBitmap which is internally used by the RadBitmap. Attached is a sample project illustrating the problem using only WPF classes. Note: At this point, we are not aware of a possible fix.
Depending on the chosen theme, the page TextBox will not display all of the digits. This is inconvenient in scenarios where the RadDataPager has many pages.
To work this around, subscribe to the Loaded event of RadDataPager and retrieve the ScrollContentPresenter element with x:Name="PART_ScrollContentPresenter" using the ChildrenOfType extension method and set its Width property to the desired value and HorizontalAlignment property to Center.
private void radDataPager_Loaded(object sender, RoutedEventArgs e)
{
RadDataPager radDataPager = (RadDataPager)sender;
ScrollContentPresenter scrollContentPresenter = radDataPager
.ChildrenOfType<ScrollContentPresenter>().FirstOrDefault(x => x.Name == "PART_ScrollContentPresenter");
if (scrollContentPresenter != null )
{
scrollContentPresenter.Width = 45;
scrollContentPresenter.HorizontalAlignment = HorizontalAlignment.Center;
}
}
System.Data.Services.Client.DataServiceQueryException
HResult=0x80131509
Message=An error occurred while processing this request.
Source=Microsoft.Data.Services.Client
StackTrace:
at System.Data.Services.Client.QueryResult.EndExecuteQuery[TElement](Object source, String method, IAsyncResult asyncResult)
at System.Data.Services.Client.DataServiceRequest.EndExecute[TElement](Object source, DataServiceContext context, String method, IAsyncResult asyncResult)
at System.Data.Services.Client.DataServiceQuery`1.EndExecute(IAsyncResult asyncResult)
at SalesDashboard.MainRepository.<>c__DisplayClass22_1.<GetDailyActualsVsTargetsByProduct>b__1() in C:\temp\SalesDashboard_WPF_Dev_2023_3_1114_SourceCode\SalesDashboard\ViewModel\MainRepository.cs:line 126
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)As a <role> I want <ability> so that <benefit>.
Reset by Clear, RemoveRange causes a memory leak of GridViewRow instances (or TreeListViewRow in RadTreeListView).
To work this around, you can call the Clear method of the RadGridView's Items collection and then reset the ItemsSource property.
this.radGridView.Items.Clear();
this.radGridView.ItemsSource = null;
this.radGridView.ItemsSource = newSource;
Edit: The number of instances of the GridViewRow class are relative to the number of containers which cover the visible viewport. They are kep by internal caching mechanism used for faster reuse of containers is data-reload scenarios. Containers are dettached from their previous viewmodels (DataContext).
In non virtualized scenario, the number of the live containers is the same as the number of items in the GridView's ItemsSource and when changing the source, the number remains the same as the items in the source.
We are closing this issue as we think the mentioned internal cache shouldn't be considered a memory problem but rather a powerful performance optimization internal tool for extensive data-refresh scenarios.
The ZIndex property change is not detected by the VisualizationLayer at runtime.
Workaround: remove and then add back the item where the ZIndex is changed.
System.Windows.Data Error: 26 : ItemTemplate and ItemTemplateSelector are ignored for items already of the ItemsControl's container type RadBreadcrumbBarItem