【发布时间】:2015-04-02 19:38:21
【问题描述】:
当我在运行时设置IsClosed 的值时,OnIsClosedChanged() 调用正常。
但是,Designer 设置属性的值但不调用OnIsClosedChanged()。
public static DependencyProperty IsClosedProperty = DependencyProperty.Register("IsClosed", typeof(bool), typeof(GroupBox), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
public bool IsClosed {
get {
return (bool)this.GetValue(IsClosedProperty);
}
set {
if ((bool)this.GetValue(IsClosedProperty) == value)
return;
this.SetValue(IsClosedProperty, value);
OnIsClosedChanged();
}
}
private void OnIsClosedChanged() {
_rowDefContent.Height = new GridLength((IsClosed ? 0 : 1), GridUnitType.Star);
}
显然IsClosed 未被设计器修改,只有IsClosedProperty 接收xaml 更改。
我的问题是:在 Designer 中修改值后,如何运行 IsClosed。或者至少为非运行时更改添加一些逻辑。
【问题讨论】:
-
您是否尝试过使用 ValidateValueCallback?使用 DependencyProperty.Register msdn.microsoft.com/en-us/library/ms597501(v=vs.110).aspx 的重载方法
-
我前段时间犯了同样的错误。依赖属性是很深的东西。该属性仅为您公开它,但 WPF 不使用您的属性(您可以将其删除)。而@AlexK,评论是正确的(它可能是答案),当 UI 更改 dependency property(不要误认为 your property)时,使用回调来获得通知(由设计者、运行时的用户等)。
标签: c# wpf xaml dependency-properties