我正在尝试将存储在.. \ 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代码:
答案 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);
}