1

在我的应用程序中,我想防止其他程序员为我的用户控件设置属性,这可能会导致一些麻烦。

一个简单的例子是我不想让某人设置UseLayoutRounding为真。

<Button UseLayoutRounding="True"/>

我想禁用它Intelisense显示我UseLayoutRounding

4

1 回答 1

1

OnPropertyChanged当有人试图改变它时,你可以重写方法并抛出异常:

protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
    if (e.Property == UseLayoutRoundingProperty && (bool)e.NewValue)
    {
        throw new PropertyIsImmutableException("UseLayoutRounding");
    }
    //....
    base.OnPropertyChanged(e);
}

或者您可以使用new关键字:

public new bool UseLayoutRounding
{
    get { return (bool)GetValue(UseLayoutRoundingProperty); }
}

但是,在没有第一个的情况下使用第二种方法仍然可以像这样改变值:

yourSuperControl.SetValue(SuperControlType.UseLayoutRoundingProperty, true);
于 2012-08-17T07:40:03.710 回答