在Silverlight中更改DependencyProperty的DefaultValue

时间:2012-04-03 07:59:35

标签: c# silverlight silverlight-5.0

我创建了一个继承自另一个Control的UserControl。我现在搜索一种方法,来改变BaseControl的DependencyProperty的defaultvalue。在WPF中,我可以使用OverrideMetadata覆盖DependecyProperty的DefaultValue。但是Silverlight中没有OverrideMetadata。

有人可以给我一个提示,我如何在Silverlight中更改DependencyProperty的DefaultValue?

1 个答案:

答案 0 :(得分:-1)

        public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(string), typeof(MyClass), new PropertyMetadata(string.Empty));
        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }

在此部分,您将设置默认值:

new PropertyMetadata(string.Empty)

它总是以空字符串开始。

编辑:

嗯,我真的想解决这个问题。我认为在一个解决方案中,我们可以尝试共同改进似乎不是最正确的解决方案。 在您的基类中执行此操作:

    public virtual void DefineDefaultValue(object default)
    {
        defaultValue = default;
                    OnPropertyChanged("MyProperty");
    }

    static object defaultValue;
    public static object Define()
    {
        return defaultValue;
    }

    public int MyProperty
    {
        get { return (int)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }

    // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(int), typeof(MainMenuBase), new PropertyMetadata((int)Define()));

毕竟,在你的类构造函数中执行此操作:

        public void ClassConstructor()
    {
        DefineDefaultValue("BlaBlaBla");
    }

    public override void DefineDefaultValue(object default)
    {
        base.DefineDefaultValue(default);
    }