我想从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属性,这意味着我无法执行我需要的逻辑。
所以我想知道如何以不同的方式解决这个问题?
答案 0 :(得分:0)
不同的方式不是从网格中攻击或衍生。
监听Loaded事件和VisualChildrenChanged,以防在加载Grid后在运行时更改子集合。在这两种情况下,您都必须执行相同的逻辑,如您所描述的那样将通过子项运行并更改或将新值应用于附加的Grid.Column属性。