簡體   English   中英

聲明的XAML列表項何時設置了依賴項屬性?

[英]When do declared XAML list items have their dependency properties set?

背景

我正在創建一個自定義的wpf面板。 為了幫助布置子項,它使用了我稱之為“布局”的輔助列表(類似於Grid.RowDefinitions或Grid.ColumnDefinitions)。 每個布局都有一些依賴項屬性,子項使用附加屬性來確定它們的放置位置,如下所示。

<Panel>
    <Panel.Layouts>
        <Layout/>
        <Layout Attachment="Right"/>
        <Layout Attachment="Left" Target="0"/>
    </Panel.Layouts>

    <ChildItem Panel.Layout="0"/>
    <ChildItem Panel.Layout="1"/>
    <ChildItem Panel.Layout="2"/>
<Panel/>

顯然,事情有點簡化,但長話短說:我需要在“排列”過程發生之前處理布局。 我創建了一個自定義集合,我可以看到添加的項目(參見下面的代碼),但這些項目只有默認屬性。

LayoutCollection: IList
{
    public int IList.Add(object value)
    {
        // When first starting, this line always returns the default value, not the one set in XAML
        Attachment a = (value as Layout).Attachment;

        // Other code happens below...
    }
 }

但是,當我在初始化面板后查看集合時,屬性都已正確設置。 這讓我想到了我的問題:

在XAML和面板初始化過程中的哪個階段,項目會被賦予其屬性,以及它們是如何分配的? 我需要以某種方式掛鈎並運行一些代碼。

我的想法是WPF的Panel布局系統並沒有真正按照你想要的方式截取。

但是有一種“同步”自定義DependencyProperties的機制。 問題是在布局過程中你需要這些屬性嗎?

如果是在ArrangeOverride期間,則必須設置AffectsArrange AffectsMeasure的MeasureOverride期間時。 還有一些其他的味道,但我認為這兩個中的任何一個都可以滿足您的要求。

例如,如果選擇AffectsArrange並且Panel會收到List.Add的通知,則會調用ArrangeOverride,並且可以在排列邏輯中使用新添加的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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