如何在C#中创建RichTextBox并测量其大小?

时间:2012-10-01 14:55:29

标签: silverlight windows-phone-7

我想创建多个RichTextBox来处理Windows Phone上的UIElement 2048px最大大小限制。 我知道有一个scrollable-textblock解决方案。

这是我的测试代码:

RichTextBox rtb = new RichTextBox();
rtb.TextWrapping = TextWrapping.Wrap;
rtb.FontSize = (Application.Current.Resources["PhoneFontSizeMedium"] as double?).Value;
rtb.FontFamily = Application.Current.Resources["PhoneFontFamilyNormal"] as FontFamily;
rtb.Width = this.Width;
Run run = new Run();
run.Text = "Hello World.Hello World.Hello World.Hello World.Hello World.";
Paragraph para = new Paragraph();
para.Inlines.Add(run);
rtb.Blocks.Add(para);
double rtbh = rtb.ActualHeight;
BodyPanel.Children.Add(rtb);

BodyPanelStackPanel,应用程序运行正常,但ActualHeight属性在调试窗口中始终返回0。

如果我在XAML中定义RichTextBox并在C#中设置其内容,则其大小属性都正常。

那么如何在纯C#中创建RichTextBox并获得其大小测量值呢?

顺便说一句,我找不到关于2048px限制的任何官方文档。

1 个答案:

答案 0 :(得分:0)

ActualHeight属性返回0,因为RichTextBox未在UI中呈现。您正在尝试测量尚未在UI中添加的元素,因此其高度为0.一旦您在UI中添加它并且它被渲染,您将获得正确的ActualHeight。

您可以尝试以下代码:

            RichTextBox rtb = new RichTextBox();
            rtb.TextWrapping = TextWrapping.Wrap;
            rtb.FontSize = 12;
            rtb.FontFamily = new FontFamily("Arial");
            rtb.Width = this.Width;
            Run run = new Run();
            run.Text = "Hello World.Hello World.Hello World.Hello World.Hello World.";
            Paragraph para = new Paragraph();
            para.Inlines.Add(run);
            rtb.Blocks.Add(para);

            BodyPanel.Children.Add(rtb);
            Dispatcher.BeginInvoke(() =>
                {
                    double rtbh = rtb.ActualHeight;
                });