0

我想创建多个RichTextBox来处理UIElementWindows Phone 上 2048px 的最大尺寸限制。我知道有一个可滚动的文本块解决方案。

这是我的测试代码:

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);

BodyPanel是 a StackPanel,应用程序运行良好,但是,该ActualHeight属性在调试窗口中始终返回 0。

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

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

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

4

1 回答 1

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;
                });
于 2012-10-03T14:28:23.303 回答