2012-07-20 119 views
0

我有一个C#自定义WPF控件。我有基于DependencyProperty的控件上的属性。现在WPF控件和自定义控件上的DependencyProperty

public static readonly DependencyProperty CurrentStateProperty = 
DependencyProperty.Register("CurrentState", typeof(ControlStateEnum), 
typeof(MyCustomControl), new PropertyMetadata(ControlStateEnum.Started)); 

public ControlStateEnum CurrentState 
{ 
    get { return (ControlStateEnum) GetValue(CurrentStateProperty); } 
    set { SetValue(CurrentStateProperty, value); } 
} 

,如果我使用的控制,并尝试使用它,鼻翼:

<myControls:MyCustomControl CurrentState="Loaded" /> 

在currentState永远不会被设置为“装载”,仍然是“已启动”。我想让它具有约束力,但也能够无约束地设置...有什么我不明白或缺少的东西?

当我在setter上设置断点时,它不会在窗口加载时更新。

+2

[Setters not be on Dependency Properties?](http://stackoverflow.com/questions/4225373/setters-not-run-on-dependency-properties) – 2012-07-20 19:50:48

+0

因此,最终的价值是存在控件初始化并加载后,从XAML设置控件。所以处理它的方法是在DependencyProperty上添加一个PropertyChangedHandler。感谢您对诊断的帮助,parapura。 – Locke 2012-07-20 20:32:40

回答

0

那么,到底价值受到了来自XAML的控制设定的控制了后已被初始化并加载。所以处理它的方法是在DependencyProperty上添加一个PropertyChangedHandler。

parapura有一个正确的答案链接(http://stackoverflow.com/questions/4225373/setters-not-run-on-dependency-properties)。

1

你确定你不是打算

改变枚举其他地方的控制得到加载后,因应工作
+0

不幸的是,它似乎并没有看到二传手正在射击。 – Locke 2012-07-20 20:24:01

+1

它不会在...不在初始化 – MyKuLLSKI 2012-07-20 20:32:50

+0

值得到更改和更新。不幸的是,这发生在控件加载和构建之后。正如其他链接所暗示的,Setters/Getters是通过Get/SetValue调用的,我们没有看到它改变。因此,处理更改并在XAML中捕获它们的唯一方法是进行回调。 – Locke 2012-07-20 20:37:19