gpt4 book ai didi

c# - 更改 App.RootVisual

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:15 25 4
gpt4 key购买 nike

我有一个主项目,它将根据执行登录的参与者的“角色”使用 MEF 加载其他项目,例如:

如果用户名是“project1”,我将加载 project1 及其对应的 XAP、模型、 View 模型和 View 。

所以我需要更改我的 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());

我在绑定(bind)到 DependencyProperty 的 MainPage 上创建了一个 ContentControl:

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

这个 ContentControl 是我加载所有 View 的地方,所以我在所有项目的 MainPages 中都有这个,它们都绑定(bind)到一个名为 MainContent 的 Dp,如上所示。

所以当我将我的 RootVisual 更改为新的 ProjectMainPage 时它工作正常,但是当我尝试在我的 ContentControl 上加载 View 时我得到这个: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()}

和堆栈跟踪:

   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 )

任何人都知道我可以做什么或更改 UI 的其他解决方案?希望我的问题很清楚,谢谢!

最佳答案

听起来像是导航框架和/或棱镜模块的工作。

Prism 选项 - 如果项目中的每个“角色”都是 Prism 模块,您可以将它们加载到模块目录中,并根据角色在需要时显示它们:

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

导航框架选项 - 如果您使用 System.Windows.Controls.Navigation 命名空间中的导航框架作为 MainPage 上的容器,您可以设置 UriMapper 并根据需要将框架的内容重定向到每个角色页面。

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

关于c# - 更改 App.RootVisual,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9311575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com