2012-07-06 69 views
0

我的团队正在为学校开发一个表面项目,我们对这项技术都很陌生。情况是:单击按钮时删除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; 

     } 

回答

0

,你放出来(在ScatterView)每个“弹出”是表面上的唯一对象。因此,关闭一个与您创建的任何其他ScatterView无关。如果您希望所有人都关闭,只能执行几件事:

您可以只在表面保留一个ScatterView。您可以保留对其的引用,并且当第二次点击该按钮时,它可能是一个触发事件,以便对原始ScatterView进行动画处理,从而引起注意。 (确保你也给它重点)

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

+0

感谢您的回答。由于我是一名学生,在wpf方面的经验很少,所以我不太明白你想说什么。你能解释我怎么做第二种方法吗? – user1507248 2012-07-07 04:27:12

+0

我想要做这样的事情,但不是在xaml中,而是在后面的代码中。 http://msdn.microsoft.com/en-us/library/ee804980(v=surface.10).aspx除了图片变成灰度图之外,我想通过点击各自的按钮使每个图片消失。但现在的问题是,当我拥有多个图像时,点击最后一幅图像,但之前的图像丢失了点击事件,即使点击其他图像的按钮,它们也只会关闭最后一幅图像。 – user1507248 2012-07-08 21:57:05