Удаление элемента ScatterViewItem при нажатии кнопки

Моя группа разрабатывает поверхностный проект для школы, и мы все довольно плохо знакомы с этой технологией. Ситуация такова:

У нас есть страница с 4 поверхностными кнопками. Всякий раз, когда пользователь нажимает / нажимает на одну из кнопок поверхности, появляется всплывающее изображение. Поскольку это приложение предназначено для многопользовательской среды, если другой пользователь коснется той же кнопки, появится другое всплывающее окно, но то же изображение. У меня есть кнопка закрытия в каждом всплывающем окне, чтобы закрыть его, когда пользователь увидит изображение.

При каждом нажатии кнопки будут создаваться холст, сетка и ScatterViewItem, а также кнопка на каждом ScatterViewItem.

У меня сейчас проблема в том, что кнопка закрытия на каждом ScatterViewItem может закрыть всплывающее окно. Тем не менее, это работает только если это только одно всплывающее окно. При наличии нескольких всплывающих окон кнопки закрывают только последнее всплывающее окно. У кого-нибудь есть предложения? Очень ценится заранее спасибо

Ниже приведен код:

private void btn1_Click(object sender, RoutedEventArgs e)
        {

            Image imageControl = new Image();
            Grid grid = new Grid();

            // changing to popup from image control

            Canvas cv1 = new Canvas();
            cv1.ClipToBounds = true;
            cv1.Width = 350;
            cv1.Height = 350;
            cv1.SetValue(Canvas.BackgroundProperty, new SolidColorBrush(Colors.Transparent));

            Image imageControl1 = new Image();
            var myBitmapImage1 = new BitmapImage();
            myBitmapImage1.BeginInit();
            myBitmapImage1.UriSource = new Uri("/Images/btn1.jpg", UriKind.Relative);
            myBitmapImage1.EndInit();
            imageControl1.Source = myBitmapImage1;
            imageControl1.Width = 250;
            imageControl1.Height = 250;

            Button sb1 = new Button();
            sb1.Content = "Close";
            sb1.Width = 40;
            sb1.Height = 40;

            imageControl1.SetValue(Canvas.TopProperty, -40.0);

            sb1.SetValue(Canvas.LeftProperty, 180.0);
            sb1.SetValue(Canvas.TopProperty, 2.0);
            sb1.Click +=new RoutedEventHandler(Close_Click);

            cv1.Children.Add(imageControl1);
            cv1.Children.Add(sb1);
            grid.Children.Add(cv1);

            App.svi = new ScatterViewItem();

            App.svi.Content = grid;
          sv.Items.Add(App.svi);

         App. svi.Visibility = System.Windows.Visibility.Visible;
            Surfaceapp1.Show();


        }

   public void Close_Click(object sender, RoutedEventArgs e)
        {
            Button srcButton = e.Source as Button;

      App.svi.Visibility = System.Windows.Visibility.Collapsed;

        }

1 ответ

Каждое всплывающее окно (ScatterView) - это уникальный объект на поверхности. Таким образом, закрытие одного не относится к любому другому ScatterView, которое вы создали. Если вы хотите, чтобы все они закрылись, вы можете сделать только несколько вещей:

Вы можете оставить только один ScatterView на поверхности. Вы можете сохранить ссылку на нее, и когда кнопка будет нажата во второй раз, это может быть триггерным событием для анимации исходного ScatterView, вызывающим на него внимание. (убедившись, что вы также уделите этому внимание)

Другой подход заключается в том, чтобы сохранить свою логику asis, но составить список каждого элемента управления, который вы создаете. Таким образом, когда вы получаете событие закрытия, вы входите в этот список и вызываете закрытие для каждого экземпляра в вашем списке. Естественно, каждый список будет косвенно связан с каждой кнопкой на форме. Вы хотели бы поместить свой крюк в событие Closing в каждом ScatterView, чтобы вы знали, когда один из них закрывается. Поскольку у вас есть несколько объектов в таблице, вы должны также предположить, что может быть несколько щелчков, поэтому вам нужно обезопасить свой логический поток при обработке закрытия всего списка.

Другие вопросы по тегам