Silverlight.Как выровнять текст в содержимом InlineUIContainer с внешним текстом в RichTextBox - PullRequest
3 голосов
/ 09 марта 2011

Задача: сделать текстовое содержимое 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>

Example

Как выровнять текст в содержимом InlineUIContainer с внешним текстом в RichTextBox независимо от типа и размера шрифта?

В WPF свойство BaselineAlignment = "Center" отлично работает .

Но Silverlight, похоже, не хватает этой функциональности.

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Я отлично оштрафован (вы можете сделать собственный элемент управления из этого):

Прежде всего, оберните ваш объект в Canvas ...

<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 вы используете...

0 голосов
/ 09 марта 2011

Попробуйте поиграть со свойством Border.Margin .. (попробуйте установить его в «0, -5,0, -5» или в другие числа)

...