Silverlight. Как выровнять текст в содержимом InlineUIContainer с внешним текстом в RichTextBox
Задача: сделать текстовое содержимое InlineUIContainer встроенным в внешний текст.
Стандартное поведение содержимого InlineUIContainer заключается в том, что нижний край находится на одной линии с внешним текстом.
Можно сместить позицию InlineUIContainer с помощью RenderTransform, но значение Y нужно выбирать для каждого типа и размера шрифта - не идеальный способ.
<RichTextBox>
<Paragraph>
LLL
<InlineUIContainer>
<Border Background="LightGoldenrodYellow">
<TextBlock Text="LLL"/>
</Border>
</InlineUIContainer>
LLL
</Paragraph>
<Paragraph>
LLL
<InlineUIContainer>
<Border Background="LightGoldenrodYellow">
<Border.RenderTransform>
<TranslateTransform Y="5" />
</Border.RenderTransform>
<TextBlock Text="LLL"/>
</Border>
</InlineUIContainer>
LLL
</Paragraph>
</RichTextBox>
Как выровнять текст в содержимом InlineUIContainer с внешним текстом в RichTextBox независимо от типа и размера шрифта?
В WPF свойство BaselineAlignment="Center" работает нормально.
Но Silverlight, похоже, не хватает этой функциональности.
2 ответа
Я оштрафован на идеальный способ (вы можете сделать пользовательский контроль из этого):
Прежде всего, оберните ваш объект в холст...
<Paragraph>LLL
<InlineUIContainer>
<Canvas x:Name="c" LayoutUpdated="c_LayoutUpdated">
<Border Background="LightGoldenrodYellow">
<TextBlock x:Name="t" FontSize="32" Text="LLL"/>
</Border>
</Canvas>
</InlineUIContainer> LLL
</Paragraph>
И добавьте обработчик событий LayoutUpdated в Canvas
private void c_LayoutUpdated(object sender, EventArgs e)
{
c.Width = t.DesiredSize.Width;
c.Height = (t.DesiredSize.Height / 1.3d);
}
После нажатия F5 вы должны увидеть чудо:)
PS: теперь текст делай как хочешь... не важно, какие FontStyle и FontSize вы используете...
Попробуйте поиграть с Border.Margin
свойство.. (попробуйте установить его в "0,-5,0,-5", или некоторые другие числа)