在基于文本框输入的堆栈面板中添加图像
本文关键字:堆栈 图像 添加 输入 于文本 文本 | 更新日期: 2023-09-27 18:05:19
我试图在stackpanel中添加存储在..'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 Code:
很明显。相同的图像已经是StackPanel的子元素,你不能一次又一次地添加它。
此外,您应该使用私有成员来保存重复使用的bmp,以节省资源:
在class.cs之外和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);
}