自动化网格

时间:2013-12-03 13:43:07

标签: wpf grid attached-properties

我想从Grid控件派生,以便我可以以特定的方式自动化其子项的布局,并且想知道什么是最好的方法。

我希望能够做的是:

    <l:CustomGrid>
        <Label Content="PropA" Grid.ColumnSpan="89"/>
        <TextBox />

        <Label Content="PropB"/>
        <Slider />

        <!-- this needs to span 2 columns -->
        <Label Content="Span" l:CustomGrid.SpanRow="True"
               HorizontalAlignment="Center" />

        <Label Content="PropC"/>
        <CheckBox />
    </l:CustomGrid>

自定义网格会自动将其设置为2列网格,包含N行,每个偶数子节点为0列,每个奇数子节点为第1列,然后在每个奇数子节点后添加新行。通过重写OnVisualChildrenChanged来执行Grid附加属性的逻辑/设置,这很容易。

然而,此时似乎尚未设置附加属性,因此未应用自定义SpanRow属性,这意味着我无法执行我需要的逻辑。

所以我想知道如何以不同的方式解决这个问题?

1 个答案:

答案 0 :(得分:0)

不同的方式不是从网格中攻击或衍生。

监听Loaded事件和VisualChildrenChanged,以防在加载Grid后在运行时更改子集合。在这两种情况下,您都必须执行相同的逻辑,如您所描述的那样将通过子项运行并更改或将新值应用于附加的Grid.Column属性。