问题是您在Setter中放置了额外的代码。当使用依赖项属性时,并不总是调用setter,例如当其他一些外部代码调用
SetValue
传入
SolidGlossTypeProperty
一个新值,不调用setter。
您应该使用属性回调方法来执行其他操作。
编辑
例如:-
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属性
通过任何方式(通过代码中的setter、动画或其他直接调用
赋值