【问题标题】:Silverlight. How to align text in InlineUIContainer content with outer text in RichTextBox银光。如何将 InlineUIContainer 内容中的文本与 RichTextBox 中的外部文本对齐
【发布时间】:2011-07-11 16:19:59
【问题描述】:

任务:使 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" works fine.

但 Silverlight 似乎很幸运拥有该功能。

【问题讨论】:

    标签: silverlight richtextbox inlineuicontainer


    【解决方案1】:

    我很好地解决了我的问题(您可以从中制作自定义控件):

    首先将您的对象包装到画布中...

    <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……

    【讨论】:

    • 感谢您的时间和坚持!你是真正的巫师!它像我梦想的那样工作。你是怎么找到的?什么是魔法系数“1.3d”?它是从哪里来的?
    • 1.3d 可能与dpi 以及 72 dpi 和 96 dpi 之间的关系有关。
    • 谢谢。这与我试图做的非常接近。在我的例子中,让画布的高度为 0.75,并将文本块内的字体减少为 RichTextBox 中周围文本的 0.75,这给了我在文本中嵌入标签的预期效果。
    【解决方案2】:

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

    【讨论】:

    • 通过将边框边距属性设置为“0,-5,0,-5”你说“我不希望'边框'从顶部填充 5 个像素和从底部填充 5 个像素,离开这个放置其他控件,但仍绘制“边框”"
    • Margin 属性作为 RenderTransform 工作 - 另一种方法可以做到这一点。如果字体类型或大小发生变化,则需要不同的边距值。在这里使用转换器的想法也不是一个解决方案 - 将字体类型和大小转换为负边距的函数是什么?
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2011-09-05
    • 2011-09-08
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多