/// <summary>
/// Handles changes to the Cursor property.
/// </summary>
/// <param name="d">
/// The <see cref="DependencyObject"/> on which
/// the property has changed value.
/// </param>
/// <param name="e">
/// Event data that is issued by any event that
/// tracks changes to the effective value of this property.
/// </param>
private static void OnCursorChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
{
CoreCursor oldCursor = (CoreCursor)e.OldValue;
CoreCursor newCursor = (CoreCursor)d.GetValue(CursorProperty);
if (oldCursor == null)
{
var handler = new CursorDisplayHandler();
handler.Attach((Control)d);
SetCursorDisplayHandler(d, handler);
}
else
{
var handler = GetCursorDisplayHandler(d);
if (newCursor == null)
{
handler.Detach();
SetCursorDisplayHandler(d, null);
}
else
{
handler.UpdateCursor();
}
}
}