2010-08-22 115 views
4

我知道如何通過調用canvas.Childern.Add()將控件添加到畫布/網格/佈局。然而,當我想嵌入一個文本塊內的東西,我似乎無法找到它的方法。文本塊不包含Add方法或任何東西,所以我有點迷路。以編程方式向文本塊中添加一行

我想轉成C#中的XAML是:

<TextBlock x:Name="textBlock"> 
    <Line X1="0" Y1="0" X2="100" Y2="0" Stroke="Black" StrokeThickness="4" x:Name="line1"/> 
    <TextBlock Text="Hello there!" VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="innerTextBlock" /> 
    <Line X1="0" Y1="0" X2="100" Y2="0" Stroke="Black" StrokeThickness="4" x:Name="line2"/> 
</TextBlock> 

編輯:我想這樣做(除了答案)最好的方法是簡單地創建一個WPF用戶控制和引用。

回答

12

你必須使用內聯物業(如前所述),以便重現XAML中就足以做到以下幾點(其中LayoutRoot是你的父母控件的名稱):

 var t = new TextBlock(); 
     t.Inlines.Add(new Line { X1 = 0, Y1 = 0, X2 = 100, Y2 = 0, Stroke = new SolidColorBrush(Colors.Black), StrokeThickness = 4.0 }); 
     t.Inlines.Add("Hello there!"); 
     t.Inlines.Add(new Line { X1 = 0, Y1 = 0, X2 = 100, Y2 = 0, Stroke = new SolidColorBrush(Colors.Black),StrokeThickness = 4.0}); 
     LayoutRoot.Children.Add(t); 
+0

謝謝,這工作完美!實際上我有這個代碼,但是我得到了_TargetInvocationError_,實際上我是愚蠢的,並且意外地刪除了使其失敗的'InitializeComponent();'。 – DMan 2010-08-22 19:57:57

4

我相信如果您有多行,您必須使用Inline屬性,它是一個包含內聯元素列表的集合。你不能直接向它添加文本,你必須將它添加到一個Inline對象 - 比如一個Run。

+0

我試過'噸。 Inlines.Add(line);'_t_是文本塊,_line_是一行。然後我將它添加到畫布上,但會拋出_TargetInvocationError_。 – DMan 2010-08-22 18:37:43

+0

我現在不在我的計算機上,我必須在看到它時看一看!就像一個運行或字符串?它應該是一個Run或其他從Inline繼承的東西,我認爲。 – 2010-08-22 18:43:18

+0

那麼,AFAIK,運行只支持文本,這不是我在這裏尋找的。正如我所說的 – DMan 2010-08-22 18:45:38

相關問題