2012-04-03 4 views
1

Я создал UserControl, который наследуется от другого элемента управления. Теперь я ищу способ изменить значение по умолчанию DependencyProperty в BaseControl. В WPF я могу с OverrideMetadata переопределить DefaultValue DependecyProperty. Но OverrideMetadata недоступен в Silverlight.Изменить DefaultValue DependencyProperty в Silverlight

Может кто-нибудь дать мне подсказку, как я могу изменить значение DefaultValue DependencyProperty в Silverlight?

ответ

-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) 

будет всегда инициированным с пустой строкой.

EDIT:

Ну, я действительно хочу, чтобы решить эту. Я думал, что в решении, кажется, не самый правильный, мы можем попытаться улучшить вместе. ли это в вас базовом классе:

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); 
    } 
+0

Спасибо за ваш ответ. Но в моем случае мой контроль наследуется от другого элемента управления, который имеет, например, уже TextProperty с строкой DefaultValue.Empty. Я хочу, чтобы теперь в моем контроле менялось значение DefaultValue, например, на «blabla». Не создавайте новое свойство! – BennoDual

+0

О, извините. Я искал ответ, но не нашел. Просто установить локальное значение вам не поможет, не так ли? – Vinicius

+0

Отредактировано прямо сейчас ... посмотрите. – Vinicius