[英]Dependency Property Default Value
我是WPF和依賴屬性的新手,我的問題可能是全新的...
我有以下依賴屬性:
public static readonly DependencyProperty IsEditableProperty =
DependencyProperty.Register("IsEditable", typeof(bool), typeof(EditContactUserControl),
new FrameworkPropertyMetadata(false, OnIsEditablePropertyChanged));
public bool IsEditable
{
get { return (bool)GetValue(IsEditableProperty); }
set { SetValue(IsEditableProperty, value); }
}
private static void OnIsEditablePropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
EditContactUserControl control = source as EditContactUserControl;
bool isEditable = (bool)e.NewValue;
if (isEditable)
control.stackPanelButtons.Visibility = Visibility.Visible;
else
control.stackPanelButtons.Visibility = Visibility.Collapsed;
}
問題是我希望OnIsEditablePropertyChanged
的代碼也可以執行我的屬性的默認值,但這不會發生。
我做錯了什么,或者我應該如何在你的意見中做到這一點?
先感謝您。
您應該在XAML中綁定 Visibility屬性並使用布爾值到Visibility Converter,而不是更改代碼中的可見性。
如果執行此操作,則無論屬性是否已初始化都無關緊要。
啟動時不會調用OnPropertyChanged回調:“默認”值實際上從未真正“設置”。 默認值:未設置時的屬性值。
如果要在控制啟動時執行某些代碼,請將其放在ApplyTemplate方法覆蓋中(在TemplatedControl的情況下)或在構造函數的末尾(在UserControl的情況下)
避免在構造函數和屬性更改的回調中復制此代碼:將它放在兩者調用的公共方法中:
void OnIsEditableChangedImpl(bool newValue)
{
....
}
我認為一個更好的方法是在你的XAML中設置stackPanelButtons.Visibility = Visibility.Collapsed
也是默認的,在這種情況下你不需要在啟動時運行所有這些代碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.