#silverlight
#silverlight
Вопрос:
Я следую небольшому руководству о том, как переключать страницы в Silverlight. Его можно найти здесь:
http://jesseliberty.com/2008/05/31/multi-page-applications-in-silverlight/
Оно немного старше, но все работало.
Используемый здесь метод заключается в создании отдельной страницы с «функцией навигатора». Если вы находитесь на странице 1, вы используете что-то вроде этого:
PageSwitcher ps = this.Parent as PageSwitcher;
ps.Navigate(new Page2());
Навигация является единственной функцией в PageSwitcher:
public void Navigate(UserControl nextPage) {
this.Content = nextPage;
}
Тем не менее, способ, которым это обрабатывается, кажется немного странным. Мне все еще интересно, в чем разница между добавлением нового пользовательского элемента управления и страницы. Я пытался добавить их оба, они очень похожи.
Похоже, что это просто использование скрытой страницы для управления переключением между общедоступными страницами. Мне это кажется каким-то чрезмерным. Есть ли другой способ?
Ответ №1:
Я думаю, что разница между Page и UserControl заключается в том, что на странице есть некоторые методы навигации, такие как NavigationService.
Для получения другого способа ознакомьтесь с экранами и проводниками Caliburn Micro. Оно позволяет вам выполнять некоторые расширенные навигационные функции без особых усилий, ознакомьтесь с образцом, HelloScreens. Оно добавляет жизненный цикл вашим экранам. А также возможность узнать, когда просмотр был привязан, и тому подобные приятные вещи.
Комментарии:
1. @Derek_Beattie: Я взглянул на это, попробовал несколько примеров и нахожу, что Caliburn чертовски сложен. Учебные пособия вообще не помогают. Часто я задаюсь вопросом, когда что-то было введено, нужно ли мне что-то добавлять в код или это просто для ссылки на исходный код. Такое ощущение, что этот проект действительно предполагает, что вы эксперт с многолетним опытом.
2. Вы все еще можете использовать навигационные материалы и использовать что-то вроде MVVM Light messenger как способ сообщить NavigationFrame перейти на другую страницу. У CM, я полагаю, немного кривовато, я думаю, то, что они сделали, блестяще. Нет ничего проще, чем присвоить элементу управления контентом имя x:Name=»ActiveItem» и позволить CM сделать все остальное.
3. @Derek_Beattie: Во время моего поиска я заметил, что некоторые из используемых компонентов больше не входят в основную установку Silverlight, а являются частью отдельного инструментария. Посмотрим завтра, поможет ли это кому-нибудь.