When using the RadToggleSwitchButton and the CheckedContent and UncheckedContent properties are not utilized, in some themes, the on and off states cannot be correctly distinguished. For example, the track or the thumb does not indicate whether the button is checked or not.
Themes, in which this is present are the following ones:
Please add an option to modify the corner radius for TrackBackground and UncheckedTrackBackground in the RadToggleSwitchButton template.
The radius of both rectangles is hard-coded to 9 (TrackBackground) / 12 (UncheckedTrackbackground) (Why are they different btw?). While it is possible to set the TrackHeight and TrackWidth to custom values, this doesn't really work well for the Fluent theme right now due to the radii quickly becoming disproportionally large or small compared to the TrackHeight. This results in the control losing its shape and becoming more and more egg-shaped or rectangular, depending on whether you decrease or increase the TrackHeight.
Ideally, the Radii would be automatically computed, depending on the selected TrackHeight (Floor(TrackHeight/2) ?), however, a manual solution would also be a lot better than nothing. That way we could at lease define proportionally matching values via styles.
NullReferenceException is thrown if you set the IsChecked property of the RadToggleSwitchButton before the button is added to the visual tree. This happens only when the switch animation is disabled.
To work this around, you can set the AnimationManager.IsAnimationEnabled property of the button to True initially. And then set it back to False on Loaded of the button.
RadToggleSwitchButton: The animation of the thumb switch updates its position when the animation finishes. This happens with a slight delay. However, if the animation is disabled, this delay should not be executed. Instead, the thumb should be updated immediately.
Currently, the delay can causes an animation-like effect in some specific situations.
To work this around, you can create a custom RadToggleSwitchButton and override the property changed callback of the IsChecked property.
public class CustomToggleSwitchButton : RadToggleSwitchButton
{
private FrameworkElement thumb;
static CustomToggleSwitchButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomToggleSwitchButton), new FrameworkPropertyMetadata(typeof(CustomToggleSwitchButton)));
IsCheckedProperty.OverrideMetadata(typeof(CustomToggleSwitchButton), new FrameworkPropertyMetadata(OnIsCheckedPropertyChanged));
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
this.thumb = this.GetTemplateChild("PART_Thumb") as FrameworkElement;
}
private static void OnIsCheckedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var switchButton = (CustomToggleSwitchButton)d;
if (switchButton.thumb == null)
{
return;
}
bool? isChecked = e.NewValue as bool?;
if (isChecked == true)
{
switchButton.thumb.HorizontalAlignment = HorizontalAlignment.Right;
}
else if (isChecked == false)
{
switchButton.thumb.HorizontalAlignment = HorizontalAlignment.Left;
}
else if (switchButton.IsThreeState)
{
switchButton.thumb.HorizontalAlignment = HorizontalAlignment.Center;
}
}
}
The UI freezes if the DropDownContent of RadDropDownButton has a native Run element and the CloseOnPopupMouseLeftButtonUp property is set to True.
If you have a tooltip on a button and focus the button before hovering it, the tooltip is not shown
The application hangs when you click on a Label element placed in the DropDownContent of RadSplitButton. In order to recreate this the content of the Label should contain an underscore character, thus enabling the access text WPF functionality. Also, the CloseOnPopupMouseLeftButtonUp property should be set to True.
This behavior can be reproduced with any element that is not derived from FrameworkElement. The issue in this case appear because when the access text is enabled, the Label control produces Run elements in its visual tree. The Run class doesn't derive from FrameworkElement, but from FrameworkContentElement, which causes the issue.
To work this around, use TextBlock instead of Label.
A StackOverflowException occurs when you press a RadDropDownButton placed into the DropDownContent of another RadDropButton. To work this around, subscribe for the LostMouseCapture event of the parent drop down button and handle it. private void DropDownButton_LostMouseCapture(object sender, MouseEventArgs e) { e.Handled = true; }
To avoid this, handle the scrolling of the ScrollViewer when the dropdown content is opened. This behavior is already implemented in RadComboBox by overriding its OnMouseWheel method and handling the event arguments.
To work this around subscribe to the MouseWheel event of RadDropDownButton and set the Handled property of the event arguments to True.
private void RadDropDownButton_MouseWheel(object sender, MouseWheelEventArgs e)
{
var btn = (RadDropDownButton)sender;
if (btn.IsOpen)
{
e.Handled = true;
}
}
The native radio button supports validation. Implement validation for the RadRadioButton
The current workaround we can offer is to define the following style for the RadioButton element: <Style TargetType="RadioButton" BasedOn="{StaticResource RadioButtonStyle}"> <Style.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter Property="BorderBrush" Value="{telerik1:FluentResource ResourceKey=AccentBrush}" /> </Trigger> </Style.Triggers> </Style> Where xmlns:telerik1="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls"
Custom property values for BorderThickness and BorderBrush are replaced after button click. To reproduce, use the following code, you'll see that a highlighted border appears after clicking the button. <telerik:RadButton Background="Gray" Foreground="White" BorderThickness="0" BorderBrush="Transparent" Content="click me" HorizontalAlignment="Center" VerticalAlignment="Center" /> Reason for declination: The border that you see is the focused state of RadButton, which is a separate visual and its BorderThickness is not template-bound to the BorderThickness of the control intentionally. We believe that a control should have focus even if its default border is removed. In our latest themes we are trying to keep this behavior. In the Office2016 theme there is an exposed palette property, which you can use in code-behind if you want to remove the focus: Office2016Palette.Palette.FocusThickness = new Thickness(0);