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();
}
}
}
도움 주셔서 감사합니다!
이 부분적으로 문제가 해결되었습니다. 이제 문제는 "s1", "s2"등을 찾을 수 없다는 것입니다. 주요 XAML에 있기 때문에. 하지만 어쨌든 큰 도움이됩니다! –
예 이러한 방식으로 제거하려면 해당 오브젝트에 대한 참조가 필요합니다. 이 참조가 없으면 (특히 좋은 해결책은 아니지만 작동합니다) 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]) –
어린이 제거 문제를 해결할 것입니다. 그것은 좋았어! 하지만 여전히 주요 XAML을 사용하여 하위 스토리 보드를 제어해야합니다. 어떻게하면 될까요? 큰 도움에 감사드립니다! –