2010-10-22 2 views
2

Я настроил собственный элемент управления в SL, и я пытаюсь заставить внешний вид элемента управления правильно вести себя. Я чувствую (с помощью некоторых умных людей здесь), что я довольно близко к этому, но я все еще не совсем там.Значение по умолчанию для свойства зависимостей в пользовательском элементе Silverlight

Когда мой элемент управления сначала добавляется в панель в Blend, он отображается, как я ожидаю, на основе шаблона, и когда я изменяю свойства зависимостей, которые я обнаружил, они отлично работают. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда вы делаете изменения через Blend и затем «перезапускаете» это значение с помощью окна параметров, он сбрасывает свойство в области «Разное», но фактически не изменяет сам элемент управления в дизайне, если Я снова создаю проект.

Вот код, который я в настоящее время:

public enum SolidGlossTypes 
    { 
     Normal, 
     Header, 
     Footer, 
     None 
    } 

    public SolidGlossTypes SolidGlossType 
    { 
     get 
     { 
      return (SolidGlossTypes)GetValue(SolidGlossTypeProperty); 
     } 
     set 
     { 
      SetValue(SolidGlossTypeProperty, value); 
      switch (value) 
      { 
       case SolidGlossTypes.Header: 
        SolidGloss_Upper.Visibility = Visibility.Visible; 
        SolidGloss_Lower.Visibility = Visibility.Collapsed; 
        break; 
       case SolidGlossTypes.Footer: 
        SolidGloss_Upper.Visibility = Visibility.Collapsed; 
        SolidGloss_Lower.Visibility = Visibility.Visible; 
        break; 
       case SolidGlossTypes.None: 
        SolidGloss_Upper.Visibility = Visibility.Collapsed; 
        SolidGloss_Lower.Visibility = Visibility.Collapsed; 
        break; 
       default: 
        SolidGloss_Upper.Visibility = Visibility.Visible; 
        SolidGloss_Lower.Visibility = Visibility.Visible; 
        break; 
      } 
     } 
    } 

    public static readonly DependencyProperty SolidGlossTypeProperty = DependencyProperty.Register("SolidGlossType", typeof(SolidGlossTypes), typeof(SolidGloss), new PropertyMetadata(SolidGlossTypes.Normal)); 

Я пытался мастерить со свойством изменили функцию обратного вызова, но не имел никакого успеха при получении его на работу.

Кроме того, можно ли установить значения по умолчанию для свойства зависимостей в стиле в generic.xaml, а затем привязать его к шаблону?

Спасибо заранее,

E

ответ

2

Проблема вы разместили дополнительный код в сеттер. При использовании свойств зависимостей установщик не всегда вызывается, например, когда некоторые другие внешние вызовы кода SetValue, проходящие в SolidGlossTypeProperty и новое значение, ваш сеттер не вызывается.

Вы можете использовать метод обратного вызова свойства для выполнения дополнительных операций.

Редактировать

Например: -

public SolidGlossTypes SolidGlossType 
{ 
    get 
    { 
     return (SolidGlossTypes)GetValue(SolidGlossTypeProperty); 
    } 
    set 
    { 
     SetValue(SolidGlossTypeProperty, value); 
    } 
} 

public static readonly DependencyProperty SolidGlossTypeProperty = DependencyProperty.Register(
    "SolidGlossType", 
    typeof(SolidGlossTypes), 
    typeof(SolidGloss), 
    new PropertyMetadata(SolidGlossTypes.Normal, OnSolidGlossTypePropertyChanged)); 


private static void OnSolidGlossTypePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
     SolidGloss source = d as SolidGloss; 
     SolidGlossTypes value = (SolidGlossTypes)e.NewValue 

     switch (value) 
     { 
      case SolidGlossTypes.Header: 
       source.SolidGloss_Upper.Visibility = Visibility.Visible; 
       source.SolidGloss_Lower.Visibility = Visibility.Collapsed; 
       break; 
      case SolidGlossTypes.Footer: 
       source.SolidGloss_Upper.Visibility = Visibility.Collapsed; 
       source.SolidGloss_Lower.Visibility = Visibility.Visible; 
       break; 
      case SolidGlossTypes.None: 
       source.SolidGloss_Upper.Visibility = Visibility.Collapsed; 
       source.SolidGloss_Lower.Visibility = Visibility.Collapsed; 
       break; 
      default: 
       source.SolidGloss_Upper.Visibility = Visibility.Visible; 
       source.SolidGloss_Lower.Visibility = Visibility.Visible; 
       break; 
     } 
} 

В этом устройстве, когда значение SolidGlossTypeProperty изменяется любым способом (сеттер в коде, с помощью анимации или других прямых звонков SetValue) всегда будет вызываться метод изменения свойства обратного вызова.

+0

+1 Кроме того, вы можете подумать о том, чтобы сделать enum объектом первого класса и помещать соответствующие значения на это, а не в ваш метод set –

+0

Хорошо, я потерял, как использовать метод обратного вызова свойства (I не может понять, что положить в оператор switch вместо «value». – Eric

+0

Alex: Я не понимаю, что вы имеете в виду. – Eric

Смежные вопросы