Silverlight自定义控件中的依赖项属性的默认值

时间:2010-10-22 16:20:15

标签: silverlight custom-controls dependency-properties

我在SL中设置了一个自定义控件,我试图让控件的默认外观正常运行。我觉得(在这里的一些聪明人的帮助下)我已经非常接近这个,但我还没有到那里。

当我的控件首次添加到Blend中的面板时,它会根据模板显示出来,并且当我修改我公开的依赖属性时,这些工作也很好。我现在遇到的问题是,当通过Blend进行更改然后使用选项框“重置”该值时,它会重置Miscellaneous窗格下的属性,但实际上并没有在设计视图中更改控件本身,除非我再次建立项目。

以下是我目前的代码:

    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中的样式,然后绑定到模板中的样式?

提前致谢,

电子

1 个答案:

答案 0 :(得分:2)

问题是您已在Setter中添加了其他代码。使用依赖项属性时,并不总是调用setter,例如当其他一些外部代码调用传递SetValue的{​​{1}}和新值时,不会调用setter。

您可以使用属性回调方法来执行其他操作。

修改

例如: -

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; } } 的值通过任何方式(代码中的setter,动画或其他对SolidGlossTypeProperty的直接调用)进行更改,就会始终调用callback属性change方法