Silverlight. 如何将InlineUIContainer内容中的文本与RichTextBox中的外部文本对齐

3
任务:使InlineUIContainer的文本内容与外部文本成为内联。
InlineUIContainer内容的标准行为是底边与外部文本对齐。
可以使用RenderTransform来移动InlineUIContainer的位置,但必须为每种字体类型和大小选择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个回答

2

我发现了一种完美的方法(你可以从中创建一个自定义控件):

首先将你的对象包裹在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:现在的文本可以任意处理...无论您使用什么字体样式和字体大小...

感谢您的时间和坚持不懈!您真是一个魔法师!它的工作方式就像我梦想的那样。您是如何发现它的?魔法系数“1.3d”是什么?它来自哪里? - Vadim Loboda
3D 可能与 dpi 以及 72 dpi 和 96 dpi 之间的关系有关。 - default
谢谢。这非常接近我想要做的事情。在我的情况下,将画布设置为高度的0.75,并将文本块中的字体减小到RichTextBox周围文本的0.75,使我实现了将标签嵌入文本的期望效果。 - froggythefrog

0

尝试使用Border.Margin属性进行操作(尝试将其设置为“0,-5,0,-5”或其他数字)


通过将边框边距属性设置为“0,-5,0,-5”,您在表达“我不希望‘边框’从顶部和底部各填充5个像素,留出这个位置给其他控件,但仍要绘制‘边框’”。 - obenjiro
Margin属性作为RenderTransform功能的一种实现方式。如果字体类型或大小发生变化,将需要不同的Margin值。在这里使用转换器的想法也不是一个解决方案 - 哪个函数可以将字体类型和大小转换为负边距? - Vadim Loboda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接