Как я могу создать пользовательский элемент управления «MyThumb», который наследуется от Thumb, и в то же время пользователь не может установить ширину и размер Heitht MyThumb? - PullRequest
0 голосов
/ 26 марта 2019

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

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

Я не знаю, как решить эту проблему, кто-нибудь может дать мне вдохновение? Спасибо за любую помощь.

1 Ответ

1 голос
/ 26 марта 2019

Вы не можете изменить 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...