如何创建一个继承自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,但是您可以覆盖 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
.
我想创建一个继承自 Thumb 的客户元素,我称之为 "MyThumb"。
我希望 Mythumb 没有宽度和高度 属性,这意味着用户无法通过 xaml 或代码设置它的宽度或高度。相反,我想提供一个 "Length" 属性 ,这意味着该控件的宽度和高度都等于 Length.
我不知道如何解决这个挑战,有人能给我一些灵感吗?谢谢你的帮助。
您不能通过删除属性来更改基础 class 的 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
.