2012-07-20 117 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