1

简单的问题。LabeledValue假设我创建了一个名为“Label”和“Value”字符串属性的自定义控件。我想知道是否可以让该控件将两个根级视觉效果(例如两个 TextBlocks)输出到视觉树,或者它们是否必须共享父控件?

考虑将此控件逻辑地放置在网格上的情况。我希望网格有两个 TextBlock 类型的可视子项,它们分别预先配置为 Grid.Row 设置为“0”和“1”。

// For this *LOGICAL* tree (i.e. what I type in XAML)...
<Grid>
    <LabeledValue Label="FooText" Value="FooValue" Grid.Row="0" />
    <LabeledValue Label="LaaText" Value="LaaValue" Grid.Row="1" />
</Grid>

// ...I want it to generate this *VISUAL* tree (XAML for hierarchical illustration only here)...
<Grid>
    <TextBlock Text="FooText"  Grid.Row="0" Grid.Column="0" />
    <TextBlock Text="FooValue" Grid.Row="0" Grid.Column="1" />
    <TextBlock Text="LaaText"  Grid.Row="1" Grid.Column="0" />
    <TextBlock Text="LaaValue" Grid.Row="1" Grid.Column="1" />
</Grid>

// ...and NOT this *VISUAL* tree. (XAML for hierarchical illustration only here)...
<Grid>
    <LabeledValue>
        <TextBlock Text="FooText"  Grid.Row="0" Grid.Column="0" />
        <TextBlock Text="FooValue" Grid.Row="0" Grid.Column="1" />
    </LabeledValue>
    <LabeledValue>
        <TextBlock Text="LaaText"  Grid.Row="1" Grid.Column="0" />
        <TextBlock Text="LaaValue" Grid.Row="1" Grid.Column="1" />
    </LabeledValue>
</Grid>

希望这是有道理的。

注意:这是对我们实际所做工作的完全过度简化,但如果可以回答/实现,那么它将向我展示我需要什么。

4

1 回答 1

0

不是直接的。您必须编写一个 MarkupExtension(或者可能只是一个普通的 DependencyObject)来查找其父 Panel 并根据其在逻辑树中的位置插入新元素。也许那时您甚至将自己从视觉/逻辑树中删除。

于 2012-09-20T20:18:17.643 回答