0

我的小组正在为学校开发一个地面项目,我们对这项技术都很陌生。情况是:

我们有一个带有 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;

        }
4

1 回答 1

0

您发出的每个“弹出窗口”(ScatterView)都是表面上的一个独特对象。因此,关闭一个与您创建的任何其他 ScatterView 无关。如果您希望所有这些都关闭,您只能做几件事:

您只能在表面上保留一个 ScatterView。您可以保留对它的引用,并且当第二次单击该按钮时,它可能是一个触发事件来为原始 ScatterView 设置动画,从而引起对它的注意。(确保你也关注它)

另一种方法是保持您的逻辑,但构建您构建的每个控件的列表。这样,当您收到关闭事件时,您会进入该列表并在列表中的每个实例上调用关闭。自然地,每个列表都会与表单上的每个按钮间接关联。您可能希望将您的钩子放入每个 ScatterView 的 Closing 事件中,以便您知道其中一个何时关闭。由于表格上有多个对象,因此您还需要假设可以有多次点击,因此在处理关闭整个列表时需要使逻辑线程安全。

于 2012-07-06T16:18:09.863 回答