Изменить App.RootVisual - PullRequest
       1

Изменить App.RootVisual

2 голосов
/ 16 февраля 2012

У меня есть Основной проект, который будет загружать другие проекты с MEF в соответствии с «Ролью» актера, который выполнил вход в систему, например:

, если имя пользователя - «project1», я загружу проект1 иего соответствующие XAP, Models, ViewModels и Views.

Так что мне нужно изменить свой App.RootVisual и настроить MainPage в соответствии с текущим проектом.

Я искал решенияв интернете и нашел почти одинаковые вещи, сделанные разными способами, и я попробовал это:

Сначала я установил свой RootVisual в качестве сетки на Application_Startup:

        Grid grid = new Grid();
        this.RootVisual = grid;
        grid.Children.Add(new MainPage());

Итак, после моих методов аутентификацииверните мне, какой проект я должен загрузить, я делаю это:

            var grid = App.Current.RootVisual as Grid;
            grid.Children.RemoveAt(0);
            grid.Children.Add(new Project1MainPage());

Я создал ContentControl на моей главной странице, который привязан к DependencyProperty:

            <ContentControl Name="region1ContentControl" Content="{Binding Path=MainContent}" Style="{StaticResource ContentControlStyle}" Grid.Row="1" Margin="0,30" />

В этом ContentControl я загружаю всемои представления, поэтому у меня есть это на всех главных страницах моего проекта, и все они связаны с Dp с именем MainContent, как показано выше.

Поэтому, когда я изменяю свой RootVisual нановый ProjectMainPage работает нормально, но когда я пытаюсь загрузить представление на свой ContentControl, я получаю это: enter image description here

со следующим InnerException:

{System.InvalidOperationException: Element is already the child of another element.
em MS.Internal.XcpImports.CheckHResult(UInt32 hr)
em MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property,        DependencyObject doh)
em MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property,   Object obj)
em System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
em System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)
em System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
em System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
em System.Windows.Data.BindingExpression.SendDataToTarget()
em System.Windows.Data.BindingExpression.SourcePropertyChanged(PropertyPathListener sender, PropertyPathChangedEventArgs args)
em System.Windows.PropertyPathListener.ReconnectPath()
em System.Windows.Data.Debugging.BindingBreakPoint.<>c__DisplayClass4.<BreakOnSharedType>b__3()}

и StackTrace:

   em System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   em System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   em System.Delegate.DynamicInvokeImpl(Object[] args)
   em System.Delegate.DynamicInvoke(Object[] args)
   em MainPagexaml_9.BindingOperation(Object BindingState, Int32 , Action )

Кто-нибудь знает, что я могу сделать или другое решение, чтобы изменить пользовательский интерфейс ??Надеюсь, я был ясен по моему вопросу, спасибо!

1 Ответ

0 голосов
/ 17 февраля 2012

Звучит как работа для навигационной рамки и / или модулей Prism.

Опция Prism - Если каждая «роль» в вашем проекте является модулем Prism, вы можете загрузить их в каталог модулей и показать их по мере необходимости в зависимости от роли:

http://msdn.microsoft.com/en-us/library/gg430868(v=pandp.40).aspx

Параметр «Навигационный фрейм» - если вы используете фрейм навигации из пространства имен System.Windows.Controls.Navigation в качестве контейнера на главной странице, вы можете настроить UriMapper и перенаправить содержимое фрейма на каждую страницу ролей, если это необходимо..

http://www.silverlightshow.net/items/The-Silverlight-3-Navigation-Framework.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...