簡體   English   中英

依賴屬性默認值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM