Dear Telerik Development Team,
First of all, I want to thank you for your great work on the RadTileView control for WPF. I appreciate the effort and attention to detail that you have invested in this component.
In my projects, RadTileView has brought significant value thanks to its visual appearance, the smooth animation when maximizing or restoring tiles, and the ability to provide distinct content for minimized and maximized states. It truly enhances the user experience, and I find the dynamic layout engaging and modern.
However, I have faced some challenges related to tile reordering and positioning:
The drag & drop rearrangement mechanism sometimes behaves in unpredictable or unintuitive ways, especially when there are many tiles or when tiles have different sizes.
There is currently no straightforward way to specify the exact row and column position of each tile when dynamically adding them from code.
It would be extremely useful to have a way to control or "lock" a tile to a specific grid position, for example by exposing explicit row and column properties for each tile, or by allowing developers to define the exact layout coordinates when adding tiles dynamically. This feature would make it possible to programmatically manage tile placement in complex dashboards, rather than relying only on the automatic layout and drag & drop interactions.
Such functionality would be highly beneficial in many scenarios, especially for enterprise dashboards where the layout must follow strict business requirements and should not be left to chance or automatic algorithms.
Would it be possible to consider this kind of feature for a future release?
If there is a known workaround or recommended approach to achieve precise tile positioning with the current RadTileView, I would greatly appreciate your guidance.
Thank you again for your work and support.
Looking forward to your reply!
Best regards,
The cell highlighting doesn't work if the ItemsSourceProvider.ItemsSource is set at runtime, while the drop down is open. The filtering of the items works, but the cell content is not colored.
To work this around, make sure to set the ItemsSource before the drop down gets opened.
In your demo select PivotGrid - Olap Support
1. add "Exchange Rates: Average Rate" to values
2. sort rows by "Reseller Order Quantity"
-> The grid will be empty
If the list is filtered by "Total Reseller Order Quantity != 0", results will show again. Thus, sorting by a column which contains rows without values seems to be faulty.
The RadExpander element gets underlined in the Visual Studio designer and you can see a NullReferenceException when mouse over the element. The issue occurs only when data bind the IsExpanded property of RadExpander.
There are no issues at runtime. Also, in the common scenario the designer doesn't break. In case the error breaks the designer, you can set the IsExpanded bindining in the code-behind, instead of XAML.
public MainWindow()
{
InitializeComponent();
this.radExpander.SetBinding(RadExpander.IsExpandedProperty, new Binding("IsExpanded"));
}
In OS two monitors are configured: monitor 1 (3840x2160) scale: 200% and monitor 2 (1920x1200) scale 100%.
Our wpf application has a main window, maximized on screen 1 and a child window maximized on screen 2.
In the app.manifest we use per monitor dpi awareness:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
</windowsSettings>
</application>
Both windows have a RadDocking instance with a docked RadPane like:
<Grid>
<telerikDocking:RadDocking Name="Docking"
HasDocumentHost="True"
telerik:DragDropGroup.Name="VDDragDropGroup">
<telerikDocking:RadDocking.DocumentHost>
...
</telerikDocking:RadDocking.DocumentHost>
<telerik:RadSplitContainer InitialPosition="DockedBottom">
<telerik:RadPaneGroup>
<telerik:RadPane Header="Test Panel" IsDockable="True">
<Border Background="Green">
<TextBlock Text="Test Panel" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</telerik:RadPane>
</telerik:RadPaneGroup>
</telerik:RadSplitContainer>
</telerikDocking:RadDocking>
</Grid>
If you drag and move the docked panel from screen 2 to screen 1 the compass at screen 1 is only shown if the mouse position is in the first quadrant of screen 1 . The compass is shown on the correct place but cannot be activated, so that no dropping is possible.
Without unsing per monitor dpi awareness everything works fine. Unfortunately we must use per monitor dpi awareness for our application.
This bug is also reproducable in V2023.3.1218.
When using an INotifyCollectionChanged (like ObservableCollection<T>), RadGridView's data engine subscribes to the CollectionChanged event of the bound collection.
It seems that the WPF views are recreated when you connect to a running remote desktop session or switch the user to a session where the corresponding WPF app is already opened. This creates new instances of all controls, but no unload or another disposal event happens. In this case, the logic that subscribes to the CollectionChanged event again is triggered for the new RadGridView, but the old one never detaches from the event. This causes a memory leak.
If you connect to the session multiple times, the CollectionChanged handler will be attached multiple times leading to a memory leak.
To work this around, set the ItemsSource of RadGridView to null in the SystemEvents.SessionChanged static event.
private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
if (e.Reason == SessionSwitchReason.SessionLock)
{
BindingOperations.ClearAllBindings(this.RadGridViewFixed);
}
}
Allow to track points that intercept vertical line from mouse position (as now) or points that intercept horizontal line from mouse position. So allow to choose TrackDirection = Horizontal/Vertical Thanks. marc.
Missing localization strings in PageSetup dialog.
Go to the headers and footers section. The localization is missing.
When using an INotifyCollectionChanged (like ObservableCollection<T>), RadDocking subscribes to its CollectionChanged event. This happens on PropertyChanged of the PaneSource property.
It seems that WPF re-intializes the application when you connect to a running remote desktop session or switch the user to a session where the corresponding WPF app is already opened. This triggers the PropertyChanged event again, which subscribes to the PaneSource collection again.
If you connect to the session multiple times, the CollectionChanged handler will be attached multiple times leading to a memory leak.
To work this around, you can manually unsubscribe from the CollectionChanged event when multiple handlers are added.
public class CustomDocking : RadDocking
{
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
if (e.Property.Name == nameof(PanesSource) && PanesSource is INotifyCollectionChanged observableCollection)
{
UnsubscribeCollectionChanged(observableCollection, this);
}
}
public static void UnsubscribeCollectionChanged(INotifyCollectionChanged collection, object dockingInstance)
{
var handlerMethod = typeof(RadDocking).GetMethod("OnPanesSourceCollectionChanged", BindingFlags.NonPublic | BindingFlags.Instance);
var handlerDelegate = Delegate.CreateDelegate(typeof(NotifyCollectionChangedEventHandler), dockingInstance, handlerMethod);
var field = collection.GetType().GetField("CollectionChanged", BindingFlags.Instance | BindingFlags.NonPublic);
var eventDelegate = (MulticastDelegate)field.GetValue(collection);
var handlers = eventDelegate?.GetInvocationList().Where(d => d.Method == handlerMethod);
bool shouldRemoveHandler = handlers.Count() > 1;
if (shouldRemoveHandler)
{
typeof(INotifyCollectionChanged)
.GetEvent("CollectionChanged")
?.RemoveMethod
?.Invoke(collection, new object[] { handlerDelegate });
}
}
}