Переопределение / форсирование курсора часто выполняется с помощью CoerceValue. Попробуйте что-то вроде этого.
FrameworkElement.CursorProperty.OverrideMetadata(
typeof(ThumbOrMyThumbDerivedClass),
new FrameworkPropertyMetadata(
null,
new CoerceValueCallback(MyHelperClassOrMyThumbderivedClass.CoerceCursor)));
private static object CoerceCursor(DependencyObject o, object value)
{
if (/* conditions when to use the custom cursor */)
{
return CustomCursor;
}
return value;
}