Доступ к новым экземплярам UserControl в других методах

1

Я сделал WrapPanel в своем главном окне, назову его MainWrap. И затем я сделал UserControl в окне UserControl (это школьный проект, а мой UserControl должен находиться за пределами главного окна), который содержит изображение внутри - named img.

Теперь, когда я нажимаю File-> Открыть в моем созданном меню, я открываю OpenFileDialog и выбирается изображение. Он создает новый экземпляр usercontrol, вводит выбранное имя файла изображения в качестве источника изображения usercontrol. Затем я добавляю этот usercontrol к моей панели обертки в главном окне.

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);
        }
    }

Это работает нормально. Каждый раз, когда я загружаю изображение, появляется новый пользовательский контроль, в котором есть невидимый текстовый блок с красным X внутри него. Если мой usercontrol имеет правое выделение, текстовый блок становится видимым.

Я хочу сделать следующее. У меня есть метод Delete_selected в моем главном окне. Как я могу получить доступ к этим UserControls из моего MainWrap и проверить, является ли их текстовый блок видимым в методе Delete_Selected?

Спасибо за помощь.

Теги:
wpf

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню