2012-07-06 4 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에 애니메이션을 적용하여주의를 끌 수있는 트리거 이벤트가 될 수 있습니다.

또 다른 방법은 로직을 그대로 유지하면서 빌드하는 각 컨트롤의 목록을 작성하는 것입니다. 그렇게하면 가까운 이벤트를 얻을 때 목록에 들어가서 목록의 각 인스턴스를 닫을 수 있습니다. 당연히 각 목록은 양식의 각 단추와 간접적으로 연관됩니다. 각 ScatterView의 Closing 이벤트에 후크를 걸어서 하나가 닫히는 것을 알 수 있습니다. 테이블에 여러 개의 객체가 있으므로 여러 번의 클릭이있을 수 있다고 가정해야하므로 전체 목록 닫기를 처리 할 때 논리 스레드를 안전하게 만들어야합니다.

+0

답변 해 주셔서 감사합니다. 저는 학생이고 wpf에 대한 경험이 거의 없기 때문에 당신이하고 싶은 말을 정말로 이해하지 못합니다. 제 2의 접근 방법을 설명해 주시겠습니까? – user1507248

+0

나는 xaml하지만 코드 뒤에 있지만이 같은 일을하고 싶다. http://msdn.microsoft.com/en-us/library/ee804980(v=surface.10).aspx 사진이 회색 음영이되는 것 이외에, 나는 그들 자신의 버튼을 클릭하여 각각을 사라지게하고 싶습니다. 하지만 문제는 지금 내가 여러 이미지를 가지고있을 때 마지막 이미지가 작동하지만 이전 이미지가 클릭 이벤트를 잃어 버렸고 다른 이미지 버튼을 탭하더라도 마지막 이미지 만 닫을 때입니다. – user1507248