Значение по умолчанию для свойства зависимости в пользовательском элементе управления Silverlight - PullRequest
2 голосов
/ 22 октября 2010

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

Когда мой элемент управления впервые добавляется на панель в 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

1 Ответ

2 голосов
/ 22 октября 2010

Проблема в том, что вы добавили дополнительный код в свой Сеттер. При использовании свойств зависимости, установщик не всегда вызывается, например, когда другой внешний код вызывает 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), всегда вызывается метод изменения свойства обратного вызова.

...