2014-11-03 80 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

相关问题