如何创建一个继承自Thumb 的自定义控件'MyThumb',同时用户不能设置MyThumb 的宽度和高度?

How can I create a custom control 'MyThumb' which inherit from Thumb,and at the same time , user can't set MyThumb's Width and Heitht?

我想创建一个继承自 Thumb 的客户元素,我称之为 "MyThumb"。

我希望 Mythumb 没有宽度和高度 属性,这意味着用户无法通过 xaml 或代码设置它的宽度或高度。相反,我想提供一个 "Length" 属性 ,这意味着该控件的宽度和高度都等于 Length.

我不知道如何解决这个挑战,有人能给我一些灵感吗?谢谢你的帮助。

您不能通过删除属性来更改基础 class 的 API,但是您可以覆盖 WidthHeight 的元数据属性并提供一个 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.