我想创建多个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);
BodyPanel
是StackPanel
,应用程序运行正常,但ActualHeight
属性在调试窗口中始终返回0。
如果我在XAML中定义RichTextBox
并在C#中设置其内容,则其大小属性都正常。
那么如何在纯C#中创建RichTextBox并获得其大小测量值呢?
顺便说一句,我找不到关于2048px限制的任何官方文档。
答案 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;
});