2009-08-16 4 views
1

5 XAMLS를 사용하는 Silverlight 응용 프로그램을 빌드하려고합니다. 첫 번째로, "Page.xaml"에는 4 개의 버튼이있는 메뉴와 캔버스가 들어있어 각 내용 XAML을 수신합니다. 각 Content XAML에는 "entrada"("enter section"애니메이션) 및 "saida"(애니메이션이 끝나는 섹션)의 2 개의 스토리 보드가 있습니다.다른 XAMLS의 스토리 보드 처리

다음과 같은 문제가 발생합니다. 메뉴가 Page.xaml에 있습니다. 클릭하면 각 단추에 "saida"스토리 보드가 시작되고 스토리 보드의 재생이 끝나면 다른 XAML의 새 콘텐츠가로드됩니다 (메뉴에서 선택). 이를 시도 할 때 Visual Studio는 각 컨텐트 XAML에 대해 "현재 컨텍스트에 'ContentCanvas'가 존재하지 않는다는 것을 알려줍니다. 여기

using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

namespace SilverlightPagingSystemProject 
{ 
    public partial class Page : UserControl 
    { 
     String secao = "home"; 
     Section1 s1 = new Section1(); 
     Section2 s2 = new Section2(); 
     Section3 s3 = new Section3(); 

     public Page() 
     { 
      // Required to initialize variables 
      InitializeComponent(); 
      Link1.MouseLeftButtonDown += new MouseButtonEventHandler(Link1_MouseLeftButtonDown); 
      Link2.MouseLeftButtonDown += new MouseButtonEventHandler(Link2_MouseLeftButtonDown); 
      Link3.MouseLeftButtonDown += new MouseButtonEventHandler(Link3_MouseLeftButtonDown); 
     } 

     private void Link1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      if (secao == "home") 
      { 
       ContentCanvas.Children.Remove(s1); 
       ContentCanvas.Children.Remove(s2); 
       ContentCanvas.Children.Remove(s3); 
       ContentCanvas.Children.Add(s1); 
      } 
      else 
      { 
       ContentCanvas.saida.Begin(); 
      } 
     } 

     private void Link2_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      if (secao == "home") 
      { 
       ContentCanvas.Children.Remove(s1); 
       ContentCanvas.Children.Remove(s2); 
       ContentCanvas.Children.Remove(s3); 
       ContentCanvas.Children.Add(s2); 
      } 
      else 
      { 
       ContentCanvas.saida.Begin(); 
      } 
     } 

     private void Link3_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      if (secao == "home") 
      { 
       ContentCanvas.Children.Remove(s1); 
       ContentCanvas.Children.Remove(s2); 
       ContentCanvas.Children.Remove(s3); 
       ContentCanvas.Children.Add(s3); 
      } 
      else 
      { 
       ContentCanvas.saida.Begin(); 
      } 
     } 
    } 
} 

그리고 내 섹션 XAML은 다음과 같습니다

여기 내 Page.xaml.cs입니다. 모두 동일합니다.

using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

namespace SilverlightPagingSystemProject 
{ 
    public partial class Section3 : UserControl 
    { 
     public Section3() 
     { 
      // Required to initialize variables 
      InitializeComponent(); 
      Section3LayoutRoot.Loaded += new RoutedEventHandler(Section1LayoutRoot_Loaded); 
      saida.Completed += new EventHandler(saida_Completed); 
     } 

     void saida_Completed(object sender, EventArgs e) 
     { 
      this.Parent.ContentCanvas.Children.Remove(s1); 
      this.Parent.ContentCanvas.Children.Remove(s2); 
      this.Parent.ContentCanvas.Children.Remove(s3); 
      this.Parent.ContentCanvas.Children.Add(secao); 
     } 

     void Section1LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
     { 
      entrada.Begin(); 
     } 
    } 
} 

도움 주셔서 감사합니다!

답변

1

제가 실수가 아니라면 참조 this.Parent를 통해 얻은 객체는 실제로 ContentCanvas 객체 여야합니다. 그래서 ContentCanvas 사실 캔버스입니다 가정

((Canvas)this.Parent).Children.Remove(s1); 

this.Parent.ContentCanvas.Children.Remove(s1); 

을 변경해보십시오.

+0

이 부분적으로 문제가 해결되었습니다. 이제 문제는 "s1", "s2"등을 찾을 수 없다는 것입니다. 주요 XAML에 있기 때문에. 하지만 어쨌든 큰 도움이됩니다! –

+0

예 이러한 방식으로 제거하려면 해당 오브젝트에 대한 참조가 필요합니다. 이 참조가 없으면 (특히 좋은 해결책은 아니지만 작동합니다) s1, s2, s3의 Name 속성을 만든 다음 Children 컬렉션을 반복 할 때 각각의 이름을 확인하십시오. 필요한 참조를 얻으십시오. 또는이 세 섹션이 ContentCanvas의 유일한 자식 인 경우 ((Canvas) this.Parent) .Children.Remove (((Canvas) this.Parent) .Children [0]) ((Canvas) this.Parent)를 사용하면됩니다. Children.Remove (((Canvas) this.Parent) .Children [1]) –

+0

어린이 제거 문제를 해결할 것입니다. 그것은 좋았어! 하지만 여전히 주요 XAML을 사용하여 하위 스토리 보드를 제어해야합니다. 어떻게하면 될까요? 큰 도움에 감사드립니다! –

관련 문제