private static void OnCursorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var oldCursor = (CoreCursor)e.OldValue;
            var newCursor = (CoreCursor)d.GetValue(CursorProperty);

            if (oldCursor == null)
            {
                var handler = new CursorDisplayHandler();
                handler.Attach((FrameworkElement)d);
                SetCursorDisplayHandler(d, handler);
            }
            else
            {
                var handler = GetCursorDisplayHandler(d);

                if (newCursor == null)
                {
                    handler.Detach();
                    SetCursorDisplayHandler(d, null);
                }
                else
                {
                    handler.UpdateCursor();
                }
            }
        }
 public static void SetCursorDisplayHandler(DependencyObject d, CursorDisplayHandler value) =>
 d.SetValue(CursorDisplayHandlerProperty, value);