Как можно нарисовать сетку внутри TextBlock?

На днях я столкнулся с следующим xaml, и я испугался:

<Grid x:Name="LayoutRoot">
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
        <Grid>
            <Rectangle Fill="AliceBlue" Width="25" Height="25"/>
        </Grid>
    </TextBlock>
</Grid>

Другими словами... как можно поместить Grid внутри TextBlock?

Ответ 1

Простой ответ заключается в том, что вы можете управлять TextBlock двумя способами... через свойство Text и через коллекцию Inlines.

В этом случае вы используете коллекцию Inlines.

TextBlock (через метод IAddChild.AddChild в TextElement) достаточно умен, чтобы обернуть эту Grid в InlineUIContainer... который, конечно же, является Inline.

Другими словами, вышеупомянутый xaml... совпадает с:

<Grid x:Name="LayoutRoot">
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
        <InlineUIContainer>
            <Grid>
                <Rectangle Fill="AliceBlue" Width="25" Height="25"/>
            </Grid>
        </InlineUIContainer>
    </TextBlock>
</Grid>

Надеюсь, что это поможет кому-то избежать неприятностей, которые у меня были. Хе-хе, хе-хе. Ну, по крайней мере, я надеюсь, что это успокоит их с пониманием того, как это работает.