在其他方法中访问UserControl的新实例

时间:2014-05-20 14:01:35

标签: c# wpf

我在主窗口中创建了一个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方法中可见?

感谢您的帮助。

1 个答案:

答案 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();