Hi guys,
I am investigating a weird scrolling behavior in our app, I have more or less reproduced it in the attached sample app. I say 'more or less' because the little sample doesn't exactly have the same structure as our app but the result looks to be the same as what is happening in our software.
When declaring an unnamed style that targets the RadTileViewItem, scrolling the minimized TileViewItems while have one in the Maximized state, reverts all the minimized ones to their 'Normal' state as well as the one that was maximized. If the RadTileViewItem style is given a Key in the resource dictionary and used explicitly in the TileView's ItemContainerStyle property the scrolling works fine.
Both ways of using the style should, in my opinion, behave exactly the same.
Please take a look.
Thanks.
Reproduced with Implicit Styles with NoXAML binaries only. The workaround is to set a fixed value for the RestoredHeight property of RadTileViewItem
You can work this around by setting the PreservePositionWhenMaximized to False and implement custom preserving logic. You can see this approach in the attached project. private bool isManualPositionChanged = false; private Dictionary<RadTileViewItem, int> maximizedItemPositionCache = new Dictionary<RadTileViewItem, int>(); public MainWindow() { InitializeComponent(); this.xTileView.PreviewTileStateChanged += XTileView_PreviewTileStateChanged; } private void XTileView_PreviewTileStateChanged(object sender, Telerik.Windows.Controls.PreviewTileStateChangedEventArgs e) { if (this.isManualPositionChanged) { return; } RadTileViewItem tileViewItem = (RadTileViewItem)e.OriginalSource; var header = tileViewItem.Header; TileViewItemState oldState = e.TileState; TileViewItemState newState = tileViewItem.TileState; if (newState == TileViewItemState.Minimized || newState == TileViewItemState.Restored) { if (maximizedItemPositionCache.ContainsKey(tileViewItem)) { this.isManualPositionChanged = true; tileViewItem.Position = maximizedItemPositionCache[tileViewItem]; this.isManualPositionChanged = false; maximizedItemPositionCache.Remove(tileViewItem); } if (newState == TileViewItemState.Restored) { this.isManualPositionChanged = true; var tileView = sender as RadTileView; foreach (RadTileViewItem item in tileView.Items) { if (item.TileState == TileViewItemState.Maximized) { item.TileState = TileViewItemState.Restored; } } this.isManualPositionChanged = false; } } else if (newState == TileViewItemState.Maximized) { if (!maximizedItemPositionCache.ContainsKey(tileViewItem)) { maximizedItemPositionCache[tileViewItem] = tileViewItem.Position; } } }
The values are switched. NewState holds the value of OldState. OldState holds the value of NewState
Workaround: Create a custom style which target type is set to TileViewItemHeader and set it to the HeaderStyle property of the TileView. Then in the custom style, set a custom DataTemplate to the HeaderTemplate property. In this template specify a TextBlock and set its Margin property for instance. Available in R3 2017 Official Release Version.
When you add RadBook as a content of RadTileViewItem and reorder the TileViewItem you get ArgumentOutOfRangeException. Workaround: You can set the width of the RadBook.
In application with heavier styles and a slower machine when items are dragged and swiped it sometimes leads to exception: Cannot animate the 'VerticalOffset' property on a 'Telerik.Windows.Controls.TileViewPanel' using a 'System.Windows.Media.Animation.DoubleAnimationUsingKeyFrames'
With our Q3 2014 SP1 release an exception is thrown when you try to maximize an Item. Available in LIB version: 2015.1.1208
The RadTileView throws an exception if you initially have a maximized and selected items in databound scenario. Fixed in LIB version: 2014.2.1006
An item disappears if you have PreservePositionWhenMaximized=true and Virtualization=true and you maximize/minimize different items a couple of times.
Then the FlowDirection is set to RightToLeft and you start dragging an RadTileViewItem it looks flipped.
When we have enough items so that the vertical scroll bar is displayed and then remove such amount of items so that they have enough space to fit in their container (and scrollbar is not needed) the vertical scrollbar is still visible.
If you set the IsEnabled property to false the control disappears while it should be transparent.
When you replace a business item in binding scenarios the old item is not removed from the tileView.
DragAndDrop doesn't work in RadTileView on Mac OS with elevated trust and out of browser application
Allow users to dynamically change the DraggingItem