2009-08-16 5 views
1

Я пытаюсь создать приложение Silverlight, где я использую 5 XAMLS. Первый, «Page.xaml» содержит меню с 4 кнопками и Canvas для получения каждого контента XAML. Каждый контент XAML имеет 2 раскадровки: «entrada» (анимация «Enter section») и «saida» (анимация окончания раздела).Признание раскадровки из другого XAMLS

У меня возникает следующая проблема: Меню находится в Page.xaml. Я хочу, чтобы каждая кнопка нажала кнопку «saya», и, когда раскадровка заканчивает игру, она загружает новое содержимое другого XAML (выбирается в меню). Когда я пытаюсь это сделать, Visual Studio продолжает говорить мне, что «ContentCanvas» не существует в текущем контексте »для каждого контента 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 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. Все они одинаковы.

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. Так попробуйте изменить

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

в

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

предполагающей ContentCanvas фактически является Canvas.

+0

Это частично решило проблему. Теперь проблема заключается в том, что он не может найти «s1», «s2» ... и так далее, так как они находятся на главном XAML. Но отличная помощь! –

+0

Да, вам обязательно понадобится ссылка на эти объекты, чтобы удалить их таким образом. Если у вас нет этой ссылки (это не очень приятное решение, но она будет работать), вы можете просто установить свойство Name s1, s2, s3, когда они будут созданы, а затем выполнить итерацию по коллекции Children, чтобы проверить имена каждого из них на получите нужные вам ссылки. Или если эти 3 секции являются единственными детьми ContentCanvas, просто используйте ((Canvas) this.Parent) .Children.Remove (((Canvas) this.Parent) .Children [0]) ((Canvas) this.Parent). Children.Remove (((Canvas) this.Parent). Дети [1]) и т. Д. –

+0

Это решит проблему удаления детей. Это было хорошо! Но мне все еще нужно контролировать раскадровку ребенка с помощью основного XAML. Как я могу это достичь? Спасибо за большую помощь! –

Смежные вопросы