我在主窗口中创建了一个WrapPanel,我们称之为MainWrap。然后我在UserControl窗口中创建了一个UserControl(它是一个学校项目,我的UserControl必须在一个主窗口之外),里面有一个图像 - 名为img。
现在当我点击文件 - >在我的编辑菜单中打开时,我打开一个OpenFileDialog并选择了一个图像。它创建了一个新的usercontrol实例,输入所选的图像文件名作为usercontrol的图像源。然后我将该usercontrol添加到主窗口中的wrap面板。
private void Load_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Image files(*.png, *.jpg)|*.png;*.jpg|All files(*.*)|*.*";
if(open.ShowDialog() == true)
{
UserControl1 usrctrl1 = new UserControl1();
usrctrl1.img.Source = new BitmapImage(new Uri(@open.FileName));
MainWrap.Children.Add(usrctrl1);
}
}
这个工作正常 - 每次加载图像时都会有一个新的usercontrol,它有一个不可见的文本块,里面有一个红色的X.如果我的用户控件被右键单击,则文本块变为可见。
接下来我要做的是。我在主窗口中有一个方法Delete_selected。如何从我的MainWrap访问这些UserControl并检查它们的文本块是否在Delete_Selected方法中可见?
感谢您的帮助。
答案 0 :(得分:0)
您可以像将其添加到MainWrap
的方式一样访问这些动态创建的用户控件:
//return all children of MainWrap those are of type UserControl1
var userControls = MainWrap.Children.OfType<UserControl1>();
foreach(UserControl1 u in userControls)
{
//here you can inspect each user control via u variable, for example :
if(u.MyTextBlock.Visibility == Visibility.Visible)
{
//do something
}
}
或者您可以直接在单行中进行过滤,例如:
//return all children of MainWrap those are of type UserControl1...
//having visible textblock
var userControls = MainWrap.Children
.OfType<UserControl1>()
.Where(o => o.MyTextBlock.Visibility == Visibility.Visible)
.ToList();