Setting OverrideColor of RadSVGImage in DataTrigger

0 Answers 74 Views
Buttons SvgImage
Giuliano
Top achievements
Rank 1
Iron
Giuliano asked on 10 Jun 2024, 11:02 PM

Hello,

 

I'm not sure if this is a bug or if this just isn't the way to change the OverrideColor for this case. I ran into an error when attempting to use the following:

<telerik:RadToggleButton Grid.Row="0" Background="Transparent" BorderThickness="0">
    <telerik:RadToggleButton.Content>
        <telerik:RadSvgImage Height="60" Width="60">
            <telerik:RadSvgImage.Style>
                <Style TargetType="telerik:RadSvgImage">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=telerik:RadToggleButton}}" Value="False">
                            <Setter Property="UriSource" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:MainWindow}}, Path=PlusImagePath}"/>
                            <Setter Property="OverrideColor" Value="Blue"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType=telerik:RadToggleButton}}" Value="True">
                            <Setter Property="UriSource" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:MainWindow}}, Path=MinusImagePath}"/>
                            <Setter Property="OverrideColor" Value="Red"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </telerik:RadSvgImage.Style>
        </telerik:RadSvgImage>
    </telerik:RadToggleButton.Content>
</telerik:RadToggleButton>

My intention here is to have the OverrideColor change the color of the svg image I am also setting using UriSource. I get the following error only when going from IsChecked being true to being false.


System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=Telerik.Windows.Controls
  StackTrace:
   at Telerik.Windows.Controls.RadSvgImage.OverrideColorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) in Telerik.Windows.Controls\RadSvgImage.cs:line 414
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
   at System.Windows.StyleHelper.InvalidateDependents(Style ownerStyle, FrameworkTemplate frameworkTemplate, DependencyObject container, DependencyProperty dp, FrugalStructList`1& dependents, Boolean invalidateOnlyContainer)
   at System.Windows.StyleHelper.OnBindingValueInStyleChanged(Object sender, BindingValueChangedEventArgs e)
   at System.Windows.Data.BindingExpressionBase.ChangeValue(Object newValue, Boolean notify)
   at System.Windows.Data.BindingExpression.TransferValue(Object newValue, Boolean isASubPropertyChange)
   at System.Windows.Data.BindingExpression.ScheduleTransfer(Boolean isASubPropertyChange)
   at MS.Internal.Data.ClrBindingWorker.NewValueAvailable(Boolean dependencySourcesChanged, Boolean initialValue, Boolean isASubPropertyChange)
   at MS.Internal.Data.PropertyPathWorker.UpdateSourceValueState(Int32 k, ICollectionView collectionView, Object newValue, Boolean isASubPropertyChange)
   at MS.Internal.Data.PropertyPathWorker.OnDependencyPropertyChanged(DependencyObject d, DependencyProperty dp, Boolean isASubPropertyChange)
   at MS.Internal.Data.ClrBindingWorker.OnSourceInvalidation(DependencyObject d, DependencyProperty dp, Boolean isASubPropertyChange)
   at System.Windows.Data.BindingExpression.HandlePropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
   at System.Windows.Data.BindingExpressionBase.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
   at System.Windows.Data.BindingExpression.OnPropertyInvalidation(DependencyObject d, DependencyPropertyChangedEventArgs args)
   at System.Windows.DependentList.InvalidateDependents(DependencyObject source, DependencyPropertyChangedEventArgs sourceArgs)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetCurrentValueInternal(DependencyProperty dp, Object value)
   at System.Windows.Controls.Primitives.ToggleButton.OnToggle()
   at Telerik.Windows.Controls.RadToggleButton.OnClick() in Telerik.Windows.Controls\RadToggleButton.cs:line 201
   at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
   at Telerik.Windows.Controls.RadToggleButton.OnMouseLeftButtonUp(MouseButtonEventArgs e) in Telerik.Windows.Controls\RadToggleButton.cs:line 231
   at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   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)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run()
   at RadSVGImageTest.App.Main()

Perhaps this combination of setters isn't possible? I've attached an example project. Any help is appreciated.

 

Thank You,

Giuliano

Dimitar
Telerik team
commented on 12 Jun 2024, 08:19 AM

Hi Giuliano, 

I am not getting the exception with the project (see attached).

Let me know if I am missing something. 

Giuliano
Top achievements
Rank 1
Iron
commented on 12 Jun 2024, 05:58 PM | edited

I was using version 2024.1.423. It appears this error is gone in 2024.2.514. Looking at the release notes it does mention for SvgImage:

  • Incorrect color displayed when override color includes opacity.

Which doesn't seem to directly address what I was seeing but perhaps other changes addressed the issue which weren't mentioned. In any case, I'll probably just move to use the latest version.

Thank You,

Giuliano

Dimitar
Telerik team
commented on 13 Jun 2024, 06:34 AM

Hi Giuliano,

Yes, we have fixed some issues with the latest version of the SVG image. Indeed the best approach is to upgrade. 

Do not hesitate to contact us if you have other questions.

No answers yet. Maybe you can help?

Tags
Buttons SvgImage
Asked by
Giuliano
Top achievements
Rank 1
Iron
Share this question
or