2012-10-01 64 views
0

我想創建多個RichTextBox來處理Windows Phone上最大尺寸爲的2048px。 我知道有一個scrollable-textblock解決方案。如何在C#中創建一個RichTextBox並測量其大小?

這裏是我的測試代碼:

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限制的任何官方文檔。

+0

你能解決使用此解決方案的問題? http://stackoverflow.com/questions/11325299/custom-richtextbox-control – AndrewJE

+0

恐怕我忽略了這個解決方案。我可以在XAML中使用不可見的RichTextBox來測量它的大小。但是我想知道如果我能用純C#做到這一點。暫時我會堅持這個解決方法。謝謝。 – rox

回答

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; 
       }); 
+0

感謝您解釋原因。由於[本文](http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx)反覆測量「ActualHeight」,我是一個很少關心它的表現。 – rox

相關問題