gpt4 book ai didi

Silverlight NavigationService 始终为空

转载 作者:行者123 更新时间:2023-12-04 02:52:57 24 4
gpt4 key购买 nike

我读到有几个人对此有疑问,所以我想发布一个(有点)优雅的解决方案,我在尝试处理这个问题时想出了。问题是当您在 Silverlight 中创建模板页面并且 ContentControls 没有父 Frame 的 NavigationService 时(当您尝试使用它时它始终为 null)。在智能中存在 NavigationService 但始终为空的类似场景。要启用站点范围的导航:

  • 新建UserControl (我叫我的'NavFrame')里面有一个导航框架(我叫我的'RootFrame')。
  • 在此框架内,您可以设置任何您喜欢的内容。
  • 将此 UserControl 设置为您的 RootVisual在 App.xaml.cs 中(即 this.RootVisual = new NavFrame(); )。
  • 要在您的任何页面中使用 NavigationService,您可以键入以下内容:
    ((NavFrame)App.Current.RootVisual).RootFrame.NavigationService
    .Navigate(new Uri("Your Uri", UriKind.RelativeOrAbsolute));
  • 最佳答案

    您可以创建一个 Action 并将其拖到您想要进行导航的控件顶部,就像这样:

    public class NavigateAction : TriggerAction<DependencyObject>
    {
    public Uri Uri
    {
    get;
    set;
    }

    protected override void Invoke(object parameter)
    {
    var frame = FindContainingFrame(AssociatedObject);

    if(frame == null)
    throw new InvalidOperationException("Could not find the containing Frame in the visual tree.");

    frame.Navigate(Uri);
    }

    protected static Frame FindContainingFrame(DependencyObject associatedObject)
    {
    var current = associatedObject;

    while(!(current is Frame))
    {
    current = VisualTreeHelper.GetParent(current);

    if(current == null)
    return null;
    }

    return (Frame)current;
    }
    }

    现在您只需拖动它并将其连接到您的目标页面。顺便说一句,这对于 SL4 是正确的,从未在 SL3 上尝试过。并且 URI 确实以以下形式工作:“ /SilverlightApplication1;component/Page1.xaml ”或框架上的 UriMapping。

    关于Silverlight NavigationService 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712218/

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