是否可以让逻辑控件添加多个根级可视控件



简单的问题。 假设我创建一个名为 LabeledValue 的自定义控件,该控件具有"标签"和"值"字符串属性。 我想知道的是,是否可以让该控件将两个根级视觉对象(例如两个 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>

希望这是有道理的。

注意:这完全简化了我们实际正在做的事情,但如果可以回答/实现这一点,那么它将告诉我我需要什么。

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

最新更新