2014-11-03 72 views
0

我有一個網格內的畫布。我想動態地添加控件(文本塊和圖像)。我正在使用下面的代碼,但它沒有顯示任何東西。如何在Silverlight中以編程方式在畫布中添加UI元素?

XAML:

<Grid x:Name="BaseGrid" 
       Background="White" 
       Grid.Row="2"> 
    <Canvas x:Name="RootCanvas" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Visibility="Collapsed" 
      Canvas.ZIndex="0"> 
     <Canvas x:Name="BaseCanvas" 
       CacheMode="BitmapCache" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Canvas.Left="0" 
       Canvas.Top="0" 
       Canvas.ZIndex="0"> 
      <Canvas.Clip> 
       <RectangleGeometry x:Name="BaseCanvasClip"/> 
      </Canvas.Clip> 
      <Canvas x:Name="DrawingCanvas" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        Canvas.Left="0" 
        Canvas.Top="0" 
        Canvas.ZIndex="10"> 
      </Canvas> 
      <Canvas x:Name="TransparentCanvas" 
        Background="Transparent" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        Canvas.Left="0" 
        Canvas.Top="0" 
        Canvas.ZIndex="100" 
        Visibility="Collapsed"> 
      </Canvas> 
     </Canvas> 
    </Canvas> 
    </Grid> 
</Grid> 

代碼:

TextBlock txtBlk = new TextBlock(); 
txtBlk.FontSize = 14; 
txtBlk.Foreground = new SolidColorBrush(Colors.Red); 
txtBlk.Text = CreateConceptTextBox.Text; 
Canvas.SetTop(txtBlk, 100); 
Canvas.SetLeft(txtBlk, 450); 
//Grid.SetRow(txtBlk, 100); 
//Grid.SetColumn(txtBlk, 450); 
linkDiscovery.DrawingCanvas.Children.Add(txtBlk); 

我與 「DrawingCanvas」 的擔憂。我在這裏錯過了什麼?

+0

它看起來是正確的。你有沒有試過用'txtBlk.Text =「hello」'這樣的字符串來測試? – McGarnagle 2014-11-03 19:09:05

+0

雅我也試過用硬編碼的字符串,但畫布是空白的。 – CSharper 2014-11-03 19:10:31

回答

1

將RootCanvas的可見性設置爲Collapsed,可以有效地隱藏它及其所有子項,包括DrawingCanvas。

+0

我讓它可見,但也是相同的結果。 – CSharper 2014-11-03 20:55:53

+1

您的Canvas.Clip未正確定義。既然你沒有給剪輯一個尺寸,你實際上剪裁了一切。刪除剪輯或給它一個實際的大小。 – Mitchell 2014-11-03 22:19:12

相關問題