Using the RadRibbonWindow with the Office2019 theme, the maximize icon is updated when the button is interacted with (it does not change between the maximized and normal states).
To work around this behavior, extract the default ControlTemplate of the RadRibbonWindow element and add an additional Setter with TargetName="maximizeButton" for its Content property, to the Trigger for the WindowState property when its value is set to Maximized. For the Value property of the added Setter, create a new RadGlyph element and set its Glyph property to GlyphWindowCollapse.
The following code snippet showcases this suggestion's implementation:
<Style TargetType="telerik:RadRibbonWindow" BasedOn="{StaticResource RadRibbonWindowStyle}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="telerik:RadRibbonWindow">
<Border x:Name="outerBorder" Background="{TemplateBinding WindowBackground}" CornerRadius="{TemplateBinding CornerRadius}">
<Grid x:Name="MaximizeWindowDecorator">
<Grid telerik:CornerRadiusHelper.ClipRadius="{Binding ElementName=outerBorder, Path=CornerRadius}" telerik:CornerRadiusHelper.ClipRadiusOffset="{TemplateBinding telerik:CornerRadiusHelper.ClipRadiusOffset}" Margin="{TemplateBinding BorderThickness}">
<Grid.RowDefinitions>
<RowDefinition Height="28"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="1" Background="{telerik:Office2019Resource ResourceKey=HeaderBackgroundBrush}"/>
<Grid Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel x:Name="IconPanel" Orientation="Horizontal" HorizontalAlignment="Left" Visibility="{TemplateBinding IconVisibility}" VerticalAlignment="Center" Margin="4 0 0 0">
<Image
Name="PART_Icon"
shell:WindowChrome.IsHitTestVisibleInChrome="True"
Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon, Converter={StaticResource IconConverter}}"
Width="{Binding Path=SmallIconSize.Width, Source={x:Static shell:SystemParameters2.Current}}"
Height="{Binding Path=SmallIconSize.Height, Source={x:Static shell:SystemParameters2.Current}}"/>
<Rectangle Width="1" Margin="4 0" Fill="{telerik:Office2019Resource ResourceKey=MainBorderBrush}"/>
</StackPanel>
<telerikRibbonViewPrimitives:WindowTitle x:Name="WindowTitle"
Grid.Column="1"
Title="{TemplateBinding Title}"
Style="{TemplateBinding TitleBarStyle}"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Margin="0 0 65 0"/>
</Grid>
<StackPanel x:Name="buttonPanel" Orientation="Horizontal" Grid.ColumnSpan="3" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0 0 2 0">
<telerik:RadButton x:Name="minimizeButton"
shell:WindowChrome.IsHitTestVisibleInChrome="True"
ToolTipService.ToolTip="Minimize"
Command="{x:Static shell:SystemCommands.MinimizeWindowCommand}"
Style="{StaticResource RibbonWindowButtonStyle}"
CornerRadius="{Binding Path=CornerRadius.TopRight, RelativeSource={RelativeSource TemplatedParent}}">
<telerik:RadButton.ToolTip>
<TextBlock Text="{telerik:LocalizableResource Key=RibbonWindowMinimize}"/>
</telerik:RadButton.ToolTip>
<telerik:RadGlyph Glyph="{StaticResource GlyphMinimize}"/>
</telerik:RadButton>
<telerik:RadToggleButton x:Name="maximizeButton"
shell:WindowChrome.IsHitTestVisibleInChrome="True"
IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=WindowState, Converter={StaticResource BooleanToWindowStateConverter}, Mode=TwoWay}"
Style="{StaticResource RadRibbonWindowToggleButtonStyle}"
CornerRadius="{Binding Path=CornerRadius.TopRight, RelativeSource={RelativeSource TemplatedParent}}">
<telerik:RadGlyph Glyph="{StaticResource GlyphWindow}"/>
</telerik:RadToggleButton>
<telerik:RadButton x:Name="closeButton"
shell:WindowChrome.IsHitTestVisibleInChrome="True"
Command="{x:Static shell:SystemCommands.CloseWindowCommand}"
Style="{StaticResource RibbonWindowButtonStyle}"
CornerRadius="{Binding Path=CornerRadius.TopRight, RelativeSource={RelativeSource TemplatedParent}}">
<telerik:RadButton.ToolTip>
<TextBlock Text="{telerik:LocalizableResource Key=RibbonWindowClose}"/>
</telerik:RadButton.ToolTip>
<telerik:RadGlyph Glyph="{StaticResource GlyphClose}"/>
</telerik:RadButton>
</StackPanel>
<Border x:Name="PART_ClientAreaBorder" Grid.Column="1" Grid.Row="1" Margin="0 12 0 0" Background="{TemplateBinding Background}"/>
<AdornerDecorator x:Name="Adorner" Grid.Column="1" Grid.RowSpan="2">
<ContentPresenter Canvas.ZIndex="0" Name="PART_RootContentPresenter"/>
</AdornerDecorator>
<ResizeGrip x:Name="WindowResizeGrip"
Grid.Row="1"
Grid.Column="1"
shell:WindowChrome.ResizeGripDirection="BottomRight"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Visibility="Collapsed"
IsTabStop="False"/>
</Grid>
<Border Background="{x:Null}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="{TemplateBinding CornerRadius}"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Window.ResizeMode" Value="CanResizeWithGrip"/>
<Condition Property="Window.WindowState" Value="Normal"/>
</MultiTrigger.Conditions>
<Setter TargetName="WindowResizeGrip" Property="Visibility" Value="Visible"/>
</MultiTrigger>
<Trigger Property="Window.ResizeMode" Value="NoResize">
<Setter TargetName="minimizeButton" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="maximizeButton" Property="Visibility" Value="Collapsed"/>
</Trigger>
<Trigger Property="Window.ResizeMode" Value="CanMinimize">
<Setter TargetName="maximizeButton" Property="IsEnabled" Value="False"/>
</Trigger>
<Trigger Property="WindowState" Value="Maximized">
<Setter TargetName="MaximizeWindowDecorator" Property="Margin" Value="6"/>
<Setter TargetName="maximizeButton" Property="Content">
<Setter.Value>
<telerik:RadGlyph Glyph="{StaticResource GlyphWindowCollapse}"/>
</Setter.Value>
</Setter>
<Setter Property="CornerRadius" Value="0"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="telerik:RadRibbonWindow.IsAutoHideTaskbar" Value="true"/>
<Condition Property="Window.WindowState" Value="Maximized"/>
</MultiTrigger.Conditions>
<Setter TargetName="MaximizeWindowDecorator" Property="Margin" Value="-7 -2 -7 -6"/>
</MultiTrigger>
<Trigger Property="IsTitleVisible" Value="False">
<Setter TargetName="WindowTitle" Property="Visibility" Value="Collapsed"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
The dialog and the watermark stating that no license is found are displayed, even when the license key is installed properly. This happens in addin projects, like Excel VSTO Add-in.
To workaround this use the TelerikLicensing.Register method to install your license script key.
public MyWpfUserControl()
{
TelerikLicensing.Register("your-script-key");
InitializeComponent();
}
An ArgumentOutOfRangeException is thrown when the Separator property is set to a string that contains alpha-numeric/numeric "not required" mask tokens, and the clear button is pressed. The control works with a custom RadMaskedTextInput control to parse different date and time patterns for the start and end dates, which replaces the mask tokens with a placeholder, resulting in the exception when updating the Value property of the RadMaskedTextInput when the value is cleared.
ArgumentOutOfRangeException occurs when the ItemsSource of RadComboBox gets reset. To recreate this the IsSelected property of RadComboBoxItem should be bound too and multiple selection should be allowed.
To work this around, you can disable the autiomation peers globally:
AutomationManager.AutomationMode = AutomationMode.Disabled;
Or you disable them only for the RadComboBox:
public class CustomComboBox : RadComboBox
{
protected override AutomationPeer OnCreateAutomationPeer()
{
return null;
}
}
The stacktrace:
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')'
System.Private.CoreLib.dll!System.ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessException() Unknown
System.Private.CoreLib.dll!System.Collections.Generic.List<System.__Canon>.this[int].get(int index) Unknown Telerik.Windows.Controls.Input.dll!Telerik.Windows.Automation.Peers.RadComboBoxAutomationPeer.RaiseSelectionEvents(System.Windows.Controls.SelectionChangedEventArgs e) Line 202 C# Telerik.Windows.Controls.Input.dll!Telerik.Windows.Controls.RadComboBox.OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e) Line 1927 C#
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.SetSelectedHelper(object item, System.Windows.FrameworkElement UI, bool selected) Unknown
PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.NotifyIsSelectedChanged(System.Windows.FrameworkElement container, bool selected, System.Windows.RoutedEventArgs e) Unknown
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source, System.Windows.RoutedEventArgs args, bool reRaised) Unknown
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender, System.Windows.RoutedEventArgs args) Unknown
Telerik.Windows.Controls.Input.dll!Telerik.Windows.Controls.RadComboBoxItem.OnSelected(System.Windows.RoutedEventArgs e) Line 59 C#
PresentationFramework.dll!System.Windows.Controls.ListBoxItem.OnIsSelectedChanged(System.Windows.DependencyObject d, System.Windows.DependencyPropertyChangedEventArgs e) Unknown
PresentationFramework.dll!System.Windows.FrameworkElement.OnPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs e) Unknown
WindowsBase.dll!System.Windows.DependencyObject.NotifyPropertyChange(System.Windows.DependencyPropertyChangedEventArgs args) Unknown
WindowsBase.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.EntryIndex entryIndex, System.Windows.DependencyProperty dp, System.Windows.PropertyMetadata metadata, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, bool coerceWithDeferredReference, bool coerceWithCurrentValue, System.Windows.OperationType operationType) Unknown
PresentationFramework.dll!System.Windows.StyleHelper.ApplyStyleOrTemplateValue(MS.Internal.FrameworkObject fo, System.Windows.DependencyProperty dp) Unknown
PresentationFramework.dll!System.Windows.StyleHelper.InvalidateContainerDependents(System.Windows.DependencyObject container, ref MS.Utility.FrugalStructList<System.Windows.ContainerDependent> exclusionContainerDependents, ref MS.Utility.FrugalStructList<System.Windows.ContainerDependent> oldContainerDependents, ref MS.Utility.FrugalStructList<System.Windows.ContainerDependent> newContainerDependents) Unknown
PresentationFramework.dll!System.Windows.StyleHelper.DoStyleInvalidations(System.Windows.FrameworkElement fe, System.Windows.FrameworkContentElement fce, System.Windows.Style oldStyle, System.Windows.Style newStyle) Unknown
PresentationFramework.dll!System.Windows.StyleHelper.UpdateStyleCache(System.Windows.FrameworkElement fe, System.Windows.FrameworkContentElement fce, System.Windows.Style oldStyle, System.Windows.Style newStyle, ref System.Windows.Style styleCache) Unknown
PresentationFramework.dll!System.Windows.FrameworkElement.OnStyleChanged(System.Windows.DependencyObject d, System.Windows.DependencyPropertyChangedEventArgs e) Unknown
PresentationFramework.dll!System.Windows.FrameworkElement.OnPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs e) Unknown
WindowsBase.dll!System.Windows.DependencyObject.NotifyPropertyChange(System.Windows.DependencyPropertyChangedEventArgs args) Unknown
WindowsBase.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.EntryIndex entryIndex, System.Windows.DependencyProperty dp, System.Windows.PropertyMetadata metadata, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, bool coerceWithDeferredReference, bool coerceWithCurrentValue, System.Windows.OperationType operationType) Unknown
WindowsBase.dll!System.Windows.DependencyObject.InvalidateProperty(System.Windows.DependencyProperty dp, bool preserveCurrentValue) Unknown
PresentationFramework.dll!System.Windows.FrameworkElement.UpdateStyleProperty() Unknown
PresentationFramework.dll!System.Windows.FrameworkElement.OnInitialized(System.EventArgs e) Unknown
Telerik.Windows.Controls.Input.dll!Telerik.Windows.Controls.RadComboBoxItem.OnInitialized(System.EventArgs e) Line 106 C#
PresentationFramework.dll!System.Windows.FrameworkElement.OnVisualParentChanged(System.Windows.DependencyObject oldParent) Unknown
PresentationFramework.dll!System.Windows.Controls.ListBoxItem.OnVisualParentChanged(System.Windows.DependencyObject oldParent) Unknown
PresentationCore.dll!System.Windows.Media.Visual.FireOnVisualParentChanged(System.Windows.DependencyObject oldParent) Unknown
PresentationCore.dll!System.Windows.Media.Visual.AddVisualChild(System.Windows.Media.Visual child) Unknown
PresentationCore.dll!System.Windows.Media.VisualCollection.Add(System.Windows.Media.Visual visual) Unknown
PresentationFramework.dll!System.Windows.Controls.UIElementCollection.AddInternal(System.Windows.UIElement element) Unknown
PresentationFramework.dll!System.Windows.Controls.Panel.GenerateChildren() Unknown
PresentationFramework.dll!System.Windows.Controls.Panel.OnItemsChangedInternal(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs args) Unknown
PresentationFramework.dll!System.Windows.Controls.Panel.OnItemsChanged(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs args) Unknown
PresentationFramework.dll!System.Windows.Controls.ItemContainerGenerator.OnRefresh() Unknown
PresentationFramework.dll!System.Windows.Controls.ItemContainerGenerator.OnCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs args) Unknown
WindowsBase.dll!System.Windows.WeakEventManager.ListenerList<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.DeliverEvent(object sender, System.EventArgs e, System.Type managerType) Unknown
WindowsBase.dll!System.Windows.WeakEventManager.DeliverEvent(object sender, System.EventArgs args) Unknown
PresentationFramework.dll!System.Windows.Data.CollectionView.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs args) Unknown
WindowsBase.dll!System.Windows.WeakEventManager.ListenerList<System.Collections.Specialized.NotifyCollectionChangedEventArgs>.DeliverEvent(object sender, System.EventArgs e, System.Type managerType) Unknown
WindowsBase.dll!System.Windows.WeakEventManager.DeliverEvent(object sender, System.EventArgs args) Unknown
PresentationFramework.dll!System.Windows.Data.CollectionView.OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs args) Unknown
PresentationFramework.dll!System.Windows.Data.ListCollectionView.RefreshOverride() Unknown
PresentationFramework.dll!System.Windows.Data.CollectionView.RefreshInternal() Unknown
PresentationFramework.dll!System.Windows.Data.CollectionView.DeferHelper.Dispose() Unknown
PresentationFramework.dll!System.Windows.Controls.ItemCollection.SetCollectionView(System.Windows.Data.CollectionView view) Unknown
PresentationFramework.dll!System.Windows.Controls.ItemsControl.OnItemsSourceChanged(System.Windows.DependencyObject d, System.Windows.DependencyPropertyChangedEventArgs e) Unknown
PresentationFramework.dll!System.Windows.FrameworkElement.OnPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs e) Unknown
WindowsBase.dll!System.Windows.DependencyObject.NotifyPropertyChange(System.Windows.DependencyPropertyChangedEventArgs args) Unknown
WindowsBase.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.EntryIndex entryIndex, System.Windows.DependencyProperty dp, System.Windows.PropertyMetadata metadata, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, bool coerceWithDeferredReference, bool coerceWithCurrentValue, System.Windows.OperationType operationType) Unknown
WindowsBase.dll!System.Windows.DependencyObject.InvalidateProperty(System.Windows.DependencyProperty dp, bool preserveCurrentValue) Unknown
PresentationFramework.dll!System.Windows.Data.BindingExpression.TransferValue(object newValue, bool isASubPropertyChange) Unknown
PresentationFramework.dll!MS.Internal.Data.PropertyPathWorker.UpdateSourceValueState(int k, System.ComponentModel.ICollectionView collectionView, object newValue, bool isASubPropertyChange) Unknown
PresentationFramework.dll!MS.Internal.Data.ClrBindingWorker.OnSourcePropertyChanged(object o, string propName) Unknown
WindowsBase.dll!System.Windows.WeakEventManager.ListenerList<System.ComponentModel.PropertyChangedEventArgs>.DeliverEvent(object sender, System.EventArgs e, System.Type managerType) Unknown
WindowsBase.dll!System.ComponentModel.PropertyChangedEventManager.OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs args) Unknown
Telerik.Windows.Controls.dll!Telerik.Windows.Controls.ViewModelBase.OnPropertyChanged(string propertyName) Unknown
> WpfApp180.dll!WpfApp180.MainViewModel.ResetData() Line 44 C#
The vertical scrolling seems to become very slow and even unresponsive, when the following conditions are met:
To minimize the issue, you can set the GroupRenderMode property of RadGridView to Nested.
The RadGridView control hangs when the frozen columns are enabled and the application is resized. The exact resizing depends on the screen resolution and the exact new size. This was originally recreated on a monitor with 1600x900 resolution 125% DPI and the application was maximized (resized from restored to full screen size). The issue occurs in the Fluent theme. Also, the FluentPalette.Palette.ScrollBarsMode static property should be set to Normal.
To work this around, you can overrider the MeasureOverride method of RadGridView and add the following code:
public class CustomGridView: RadGridView
{
private static readonly PropertyInfo internalColumnsProp = typeof(GridViewDataControl).GetProperty("InternalColumns", BindingFlags.Instance | BindingFlags.NonPublic);
private static MethodInfo invalidateColumnsMethod;
protected override Size MeasureOverride(Size availableSize)
{
if (EnableRowVirtualization && !double.IsInfinity(availableSize.Height))
{
var internalColumns = internalColumnsProp.GetValue(this);
if (invalidateColumnsMethod == null)
{
invalidateColumnsMethod = internalColumns.GetType().GetMethod("InvalidateColumnWidthsCalculation", BindingFlags.Instance | BindingFlags.NonPublic);
}
invalidateColumnsMethod.Invoke(internalColumns, null);
}
return base.MeasureOverride(availableSize);
}
When the RadScheduleView has a recurring appointment with no end date for its recurrence in certain scenarios multiple errors can be try/catch-ed internally, which leads to a degraded performance. One such scenario is when a recurring appointment with no end date starts before the currently displayed time period, but does not have any occurrences before the displayed time period.
As a workaround, an end date can be added to the recurrence rule of recurring appointments.
If a RadTileViewItem hosts several controls (e.g. Buttons, RadioButtons) users should be able to change the focused element using arrow keys.
The following exception is raised when adding a ColumnGroupDescriptor to the GroupDescriptors property of a RadGridView. This bug is data specific and I've only been able to duplicate it with a large data set but the issue seems like it could be addressed without the actual data, given that the code causing the issue is apparently passing a pixelWidth < 0.
System.ArgumentOutOfRangeException: 'The parameter value must be greater than zero.
Parameter name: pixelWidth'
Exception when resizing column with width set to star and min-width set to 0.
Set the properties to the above and resize a column to 0 and then to the original width -> an exception occurs.
As a result, the glyphs are not measured and positioned properly. The issue applies to the TrueType and Type1 fonts.
The TableCellProperty.Padding property of the "TableNormal" StyleDefinition doesn't take effect in the UI. The same is valid for the TableProperties.CellPadding property.
To work this around, you can manually set the Padding property of all TableCell elements in the RadDocument.
var cells = radDocument.EnumerateChildrenOfType<Telerik.Windows.Documents.Model.TableCell>();
foreach (var cell in cells)
{
cell.Padding = new Padding(10);
}
When RadRichTextBox for WPF is hosted in a WinForms application (through ElementHost), typing with Japanese IME duplicates the typed letters, which makes the control unusable with the default behavior. Possible workaround: Create custom caret. There are some suggestions in this forum thread: https://www.telerik.com/forums/richtextbox-doesn't-support-japanese-ime-when-hosted-in-winforms