首頁 >後端開發 >C++ >如何觸發從XAML更改依賴項屬性上的回調?

如何觸發從XAML更改依賴項屬性上的回調?

Barbara Streisand
Barbara Streisand原創
2025-01-24 12:47:10626瀏覽

How to Trigger Callbacks on Dependency Property Changes from XAML?

在 XAML 中處理依賴屬性更改的回調

在運行時為依賴屬性設置值時,相應的 OnPropertyChanged 方法會立即被調用。但是,當設計器通過 XAML 分配屬性值時,這些回調保持休眠狀態。這種行為源於直接使用屬性系統的 SetValue 方法的效率,繞過了屬性包裝器設置器方法。因此,在這種情況下,屬性包裝器中的邏輯無效。

為了解決這個問題,請使用屬性元數據註冊一個 PropertyChangedCallback

<code class="language-csharp">public static readonly DependencyProperty IsClosedProperty =
    DependencyProperty.Register(
        "IsClosed", typeof(bool), typeof(GroupBox),
        new FrameworkPropertyMetadata(false,
            FrameworkPropertyMetadataOptions.AffectsRender,
            (o, e) => ((GroupBox)o).OnIsClosedChanged()));

public bool IsClosed
{
    get { return (bool)GetValue(IsClosedProperty); }
    set { SetValue(IsClosedProperty, value); }
}

private void OnIsClosedChanged()
{
    _rowDefContent.Height = new GridLength((IsClosed ? 0 : 1), GridUnitType.Star);
}</code>

這種方法確保 OnIsClosedChanged 方法在修改 IsClosed 屬性值時執行,無論來源是 XAML、綁定等。

以上是如何觸發從XAML更改依賴項屬性上的回調?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn