避免在 WPF 的画布中添加相同的用户控件
本文关键字:用户 控件 添加 WPF 布中 | 更新日期: 2023-09-27 18:32:05
我在WPF窗口中使用画布来显示UserControl。我不想在画布中添加相同的用户控件。
我该怎么做?
目前我已经做了..
private void OpenChild(UserControl ctrl)
{
ctrl.Uid = ctrl.Name;
if (JIMSCanvas.Children.Count == 0)
{
JIMSCanvas.Children.Add(ctrl);
}
else
{
foreach (UIElement child in JIMSCanvas.Children)
{
if (child.Uid == ctrl.Uid)
{
MessageBox.Show("Already");
}
else
{
JIMSCanvas.Children.Add(ctrl);
}
}
}
}
并添加如下所示的用户控件
OpenChild(new JIMS.View.Ledger());
它对我有用,但是当我添加其他控件时,例如
OpenChild(new JIMS.View.Stock());
它抛出一个异常,称为
枚举器无效,因为集合已更改。
该错误是由于您在循环过程中修改枚举(在 foreach 内)的事实。 只需使用不更改枚举的方法:
bool alreadyExists = false;
UIElement existingElement = null;
foreach (UIElement child in JIMSCanvas.Children)
{
if (child.Uid == ctrl.Uid)
{
alreadyExists = true;
existingElement = child;
}
}
if (alreadyExists)
{
MessageBox.Show("Already");
existingElement.Visibility = System.Windows.Visibility.Visible;
}
else
{
JIMSCanvas.Children.Add(ctrl);
}
或者更简单
if (JIMSCanvas.Children.Any(c => c.Uid == ctrl.Uid)
{
MessageBox.Show("Already");
}
else
{
JIMSCanvas.Children.Add(ctrl);
}