Я сделал 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?
Спасибо за помощь.
Вы можете получить доступ к этим динамически созданным пользовательским элементам управления так же, как вы добавили его в 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();