我在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中的样式,然后绑定到模板中的样式?
提前致谢,
电子
答案 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方法