Как я могу создать пользовательский элемент управления ‘MyThumb’, который наследуется от Thumb, и в то же время пользователь не может установить ширину и высоту MyThumb?

#wpf #xaml #controls #customer

#wpf #xaml #элементы управления

Вопрос:

Я хочу создать элемент customer, который наследуется от Thumb, который я называю «MyThumb».

Я хочу, чтобы у MyThumb не было свойства Width и Height, что означает, что пользователь не может установить его ширину или высоту с помощью XAML или кода. Вместо этого я хочу предоставить свойство «Length», которое означает, что ширина и высота этого элемента управления имеют одинаковую длину.

Ответ №1:

Вы не можете изменить API базового класса, удалив свойства, но вы могли бы, например, переопределить метаданные для Width и Height свойств и предоставить CoerceValueCallback , который предотвращает присвоение свойству пользовательского значения:

 public class MyThumb : Thumb
{
    private const double DefaultWidth = 100.0;
    public MyThumb()
    {
        WidthProperty.OverrideMetadata(typeof(MyThumb),
            new FrameworkPropertyMetadata(DefaultWidth) { CoerceValueCallback = new CoerceValueCallback(OnWidthCoerced) });
    }

    private object OnWidthCoerced(DependencyObject d, object baseValue)
    {
        return DefaultWidth;
    }
}
  

В качестве альтернативы вы можете создать InvalidOperationException .