C# 如何在silverlight中以编程方式在画布中添加UI元素?

C# 如何在silverlight中以编程方式在画布中添加UI元素?,c#,silverlight,canvas,C#,Silverlight,Canvas,我在网格里有一块画布。我想动态添加控件(文本块和图像)。我正在使用以下代码,但它没有显示任何内容 XAML: 我关心的是“绘画画布”。我在这里遗漏了什么?您的RootCanvas的可见性设置为Collapsed,这有效地隐藏了它及其所有子项,包括DrawingCanvas。它看起来是正确的。您是否尝试过使用诸如txtBlk.Text=“hello”之类的文字字符串进行测试?是的,我也尝试过使用硬编码字符串,但画布为空。我使其可见,但结果相同。您的画布.Clip定义不正确。因为您没有给剪辑指定大小

我在网格里有一块画布。我想动态添加控件(文本块和图像)。我正在使用以下代码,但它没有显示任何内容

XAML:


我关心的是“绘画画布”。我在这里遗漏了什么?

您的RootCanvas的可见性设置为Collapsed,这有效地隐藏了它及其所有子项,包括DrawingCanvas。

它看起来是正确的。您是否尝试过使用诸如
txtBlk.Text=“hello”
之类的文字字符串进行测试?是的,我也尝试过使用硬编码字符串,但画布为空。我使其可见,但结果相同。您的画布.Clip定义不正确。因为您没有给剪辑指定大小,所以实际上您正在剪辑所有内容。取下夹子或给它一个实际尺寸。
<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);