NavigationWindow - Где это?
Мое приложение WPF становится настоящей болью. Я создал окно и хочу загрузить другую страницу, когда нажимаю на кнопку. Я предполагал, что это будет просто, но это не так. Мне удается загрузить другую страницу с помощью this.content = new UserPage()
, Однако из этой страницы пользователя я не могу вернуться в главное окно. Я не могу использовать this.content
потому что окно не может быть ребенком.
Поэтому я искал вокруг и обнаружил, что должен использовать NavigationService, чтобы сделать вещи намного проще. Я пытался использовать NavigationService.GetNavigationService(this)
но это не сработало, так как всегда возвращало ноль. Я подумал, что это потому, что мое главное окно получено из Window
и не NavigationWindow
, Есть ли способ преобразовать мое окно в NavigationWindow без повторного запуска проекта? Всякий раз, когда я создаю новый файл, нет шаблона NavigationWindow - только Window, Page, User Control и т.д...
Я попытался вручную заменить XAML на NavigationWindow, и он работал нормально, но метод NavigationService по-прежнему возвращал ноль. Наверху была полоса со стрелками "назад" и "вперед" (оба отключены), но мне это не нужно. Я просто хотел бы использовать Navigate()
метод, так что я могу легко переключаться между страницами. Любые идеи о том, что я могу сделать?
Спасибо за любую помощь, это сводит меня с ума!:)
3 ответа
Я попытался вручную заменить XAML на NavigationWindow, и он работал нормально, но метод NavigationService по-прежнему возвращал ноль
Вам не нужно NavigationService
если ваше окно уже NavigationWindow
, NavigationWindow
имеет Navigate
метод.
Вы также можете использовать стандарт Window
и положить Frame
контроль над этим. Это работает примерно как NavigationWindow
за исключением того, что он встроен в окно
Skoder,
Я не совсем уверен, что вы пытаетесь сделать, но я посмотрю, смогу ли я помочь. Во-первых, звучит так, как будто вы хотите NavigationWindow. Если вам нужна только одна страница в вашем приложении, тогда ваш первый подход будет работать, но в ту минуту, когда вы говорите о более чем одной странице и хотите перейти с одной страницы на другую, вы говорите о NavigationWindow.
Во-вторых, после того, как вы выберете окно навигации, XAML должен быть прямым, просто замените Window на NavigationWindow, и вам будет хорошо, если вы поймете, что теперь вы больше не будете напрямую управлять содержимым окна. Вместо этого встроенный NavigationService будет обрабатывать это. О, и вам не нужно создавать явный NavigationService, поскольку класс уже предоставляет его. Вам просто нужно ориентироваться:
this.Navigate(new Url("pack://aplication:,,,/MyAssembly,component/MyPage.xaml", UriKind.Absolute));
В качестве альтернативы use можно использовать XAML:
Source = "pack://aplication:,,,/MyAssembly,component/MyPage.xaml"
На этом этапе вам понадобится некоторый интерфейс, позволяющий пользователям переходить с одной страницы на другую (например, элемент управления Breadcrumb или TreeView), но как только они появятся, встроенный элемент управления перемещением позволит вам перемещаться по журналу, который поддерживается автоматически для вас. То есть большая часть основной работы по навигации выполняется для вас, вам просто нужно выяснить, как пользователь перемещается вперед к некоторому контенту.
Но в этот момент все может стать довольно странным. Я столкнулся с этим сам. Поскольку вы не можете добавить сетку или какой-либо другой элемент содержимого во фрейм, вам нужно изменить шаблон окна NavigationWindow, чтобы добавить дополнительные элементы управления, которые составляют обычное приложение. Такие вещи, как меню и панели инструментов, не являются частью стандартного окна навигации WPF.
Простите за бесстыдную саморекламу, но я создал продукт, потому что столкнулся с этими ограничениями, и на рынке не было ничего доступного. Вы можете посмотреть демо на:
http://www.teraque.com/products/explorer-chrome-suite/
Он был разработан, чтобы стать профессиональной версией WPF NavigationControl, которую Microsoft раздает бесплатно. Взгляните на демонстрацию, если вы не хотите приобретать пакет, я с радостью расскажу вам, если это то направление, куда вы хотите обратиться.
С уважением,
Дональд Рой Эйри
donald.roy.airey@teraque.com
Я сделал это, но не смог выяснить, как перезагрузить родительское окно из оператора vb.net на странице, которая находится во фрейме. У меня есть некоторый код в функции window_loaded, которую я хочу выполнить.