我的小组正在为学校开发一个表面项目,我们对这项技术都很陌生。情况是:
我们有一个带有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 :(得分:0)
你输出的每个'弹出窗口'(ScatterView)是表面上的唯一对象。因此,关闭一个与您创建的任何其他ScatterView无关。如果您希望所有这些都关闭,那么您只能做一些事情:
表面上只能保留一个ScatterView。您可以保留对它的引用,当第二次单击该按钮时,它可能是一个触发事件,可以为原始ScatterView设置动画,从而引起注意。 (确保你也给予关注)
另一种方法是保持你的逻辑asis,但是建立你构建的每个控件的列表。这样当你得到一个关闭事件时,你进入该列表并在列表中的每个实例上调用一个关闭。当然,每个列表都会间接与表单上的每个按钮相关联。您可能希望将钩子放入每个ScatterView上的Closing事件中,以便您知道何时关闭其中一个。由于表上有多个对象,因此您还需要假设可以有多次单击,因此在处理关闭整个列表时需要使逻辑线程安全。