根据文本框输入在堆栈面板中添加图像

时间:2013-03-21 11:10:20

标签: c# wpf wpf-controls

我正在尝试将存储在.. \ Resources \ ebi.png中的图像添加到stackpanel中。大多数情况下,相同的图像将显示在Stackpanel中,具体取决于文本框输入“EtReqCount”。下面是尝试的示例代码,但收到错误说

  

“指定的Visual已经是另一个Visual的子项或CompositionTarget的根”

以下是尝试过的代码:

    private BitmapImage bmp = new BitmapImage(new Uri("WpfApplication1;component/Resources/ebi.png", UriKind.RelativeOrAbsolute));

    private void EtReqCount_TextChanged(object sender, TextChangedEventArgs e)
    {
        StackPanel dynamicStackPanel = new StackPanel();
        dynamicStackPanel.Width = 300;
        dynamicStackPanel.Height = 200;
        dynamicStackPanel.Background = new SolidColorBrush(Colors.LightBlue);
        dynamicStackPanel.Orientation = Orientation.Vertical;
        if (EtReqCount.Text != "")
        {

            for (int k = 1; k <= Int32.Parse(EtReqCount.Text); k++)
            {

                Image img = new System.Windows.Controls.Image(); // This makes the difference.
                img.Source = bmp;
                dynamicStackPanel.Children.Add(img);
            }
        }
    }

XAML代码:

1 个答案:

答案 0 :(得分:0)

很明显。同一图像已经是StackPanel的子图像,您无法一次又一次地添加它。

此外,您应该使用私有的memeber来保存重复使用的bmp以节省资源:

在class方法之外,在class.cs中:

private BitmapImage bmp=new BitmapImage(new Uri("/....../ebi.png", UriKind.RelativeOrAbsolute);

您可以创建图像的新实例:

for(int i=0; i<...;i++)
{
    img = new System.Windows.Controls.Image();  // This makes the difference.
    img.Source = bmp;
    dynamicStackPanel.Children.Add(img);
}