0

我正在尝试在堆栈面板中添加存储在 ..\Resources\ebi.png 中的图像。大多数情况下,同一图像将显示在 Stackpanel 中,具体取决于文本框输入“EtReqCount”。以下是尝试过的示例代码,但出现错误提示

“指定的视觉对象已经是另一个视觉对象的子对象或 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 代码:

4

1 回答 1

0

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

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

在类方法之外,在 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);
}
于 2013-03-21T11:16:08.960 回答