2015-10-12 1 views
0

У меня есть приложение WPF, включенное Prism 4.0, которое широко использует RequestNavigate, и оно работает хорошо. У меня есть сценарий, в котором я хотел бы отобразить часть своего пользовательского интерфейса для изображения и сохранить его для последующего использования с помощью службы Windows. Я уже знаю, как использовать RenderTargetBitmap для генерации изображения, но всякий раз, когда мой код пытается вызвать RequestNavigate, ничего не происходит. Я называю bootstrapper, поэтому я ожидаю, что все типы будут загружены, но он просто не работает. Может ли кто-нибудь сказать мне, может ли это быть возможно? Есть ли что-то, что присуще RequestNavigate, что мешает ему работать, когда нет пользовательского интерфейса?Требуется ли призма Запросить работу без интерфейса?

Индивидуальные шаги: Во-первых, я вызываю Run на моем MefBootstrapper. Это загружает все сборки в AggregateCatalog.

Затем я использую MEF CompositionContainer.GetExportedValue для создания пользовательского элемента управления WPF, который имеет единственный ContentControl, которому присваивается имя RegionManager.RegionName. Это всегда создает начальный UserControl просто отлично.

Наконец, я вызываю MefRegionManager.RequestNavigate с именем области на моем UserControl и пути к другому UserControl, который я хочу загрузить. Это не позволяет загрузить UserControl, к которому я пытаюсь перейти.

Если это единственные шаги, которые я выполняю, то окончательный UserControl не сможет загрузить ли я из службы Windows или из моего приложения WPF. Однако, если я вызываю SetRegionManager для явного добавления области из моего хоста UserControl перед вызовом RequestNavigate, то последний UserControl будет загружаться должным образом, если код запускается из приложения WPF. Если этот же код запускается из моей службы Windows, он все равно не загружается.

+0

Существует не достаточно подробно в вашем вопросе. Что вы имеете в виду, что вы вызываете загрузчик? Вы находитесь в приложении WPF, но без интерфейса? Когда вы вызываете RequestNavigate, какой объект вы вызываете (Region, ReginManager и т. Д.)? Что вы просматриваете в вызове метода RequestNavigate? Пожалуйста, предоставьте более подробную информацию и фрагменты кода, чтобы лучше нарисовать изображение. Вы пытаетесь перейти к динамическому изображению? –

ответ

0

RequestNavigate - это именно то, что требуется для перехода к загруженной (но неактивной) области. Он не будет загружать себя. Вам нужно отдельно управлять загрузкой представлений (включая представления в представлениях).

Если ваш вложенный пользовательский элемент управления загружен только внутри родителя, и вам не нужно управлять им во время выполнения, то вы можете использовать ViewDiscovery. Вы регистрируете все виды заранее, а затем, когда регион создается, он ищет (и загружает) все вложенные представления. Если вам нужно управлять просмотрами во время выполнения, включать и отключать их и т. Д., Вы можете использовать ViewInjection.

Для ViewDiscovery в методе Initialize из ModuleInit класса в модуле, вставьте следующую строку:

_regionManager.RegisterViewWithRegion("RegionNameOfYourNestedControl", 
() => this.container.Resolve<NestedUserControl>()); 

Затем, когда ваш регион загружен, NestedUserControl автоматически загрузите в свой ContentControl (регион).

Более подробную информацию о ViewDiscovery, ViewInjection и композиции UI, have a read of the prism documentation