单击按钮时删除ScatterViewItem

时间:2012-07-06 15:49:39

标签: wpf pixelsense scatterview

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

我们有一个带有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 个答案:

答案 0 :(得分:0)

你输出的每个'弹出窗口'(ScatterView)是表面上的唯一对象。因此,关闭一个与您创建的任何其他ScatterView无关。如果您希望所有这些都关闭,那么您只能做一些事情:

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

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