0

我想在 WPF 项目中将 navigationView 与 xaml 岛一起使用。我将 NavigationView 添加到项目中。外观方面没有问题。如果我在代码隐藏中创建一个新页面,我可以在页面之间切换。

但是当我想在我的项目中打开一个附加页面时,我遇到了以下错误。

C# 代码

        private UIControls.Frame frame;
    private Media.FontFamily segoeFontFamily;

    public MainWindow()
    {
        InitializeComponent();
        segoeFontFamily = new Media.FontFamily("Segoe MDL2 Assets");
    }

    private void Host_ChildChanged(object sender, EventArgs e)
    {
        try
        {
            WindowsXamlHost host = (WindowsXamlHost)sender;

            if (host.Child is UIControls.NavigationView navigationView)
            {
                var configureItem = new UIControls.NavigationViewItem()
                {
                    Content = "Configure",
                    Icon = new UIControls.FontIcon()
                    {
                        FontFamily = segoeFontFamily,
                        Glyph = "\uE719",
                    }
                };

                var filterItem = new UIControls.NavigationViewItem()
                {
                    Content = "Filter",
                    Icon = new UIControls.FontIcon()
                    {
                        FontFamily = segoeFontFamily,
                        Glyph = "\uE8C7",
                    }
                };

                navigationView.MenuItems.Add(configureItem);
                navigationView.MenuItems.Add(filterItem);

                frame = new UIControls.Frame();
                navigationView.Content = frame;

                navigationView.SelectionChanged += NavigationView_SelectionChanged;
            }
        }
        catch (Exception)
        {
        }
    }

    private void NavigationView_SelectionChanged(UIControls.NavigationView sender, UIControls.NavigationViewSelectionChangedEventArgs args)
    {
        try
        {
            if (args.SelectedItem is UIControls.NavigationViewItem item)
            {
                switch (item.Content)
                {
                    case "Configure":
                        frame.Navigate(typeof(Configure));
                        break;

                    case "Filter":
                        frame.Navigate(typeof(CanBusFilterPage));
                        break;
                    default:
                        break;
                }
            }
        }
        catch (Exception)
        {
        }
    }

Xaml 代码

<xamlHost:WindowsXamlHost x:Name="Host"
                              InitialTypeName="Windows.UI.Xaml.Controls.NavigationView"
                              ChildChanged="Host_ChildChanged"/>

错误

System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'
4

1 回答 1

0

这在您的代码中可能根本不是问题。根据这篇文章,它可能是混合配置 DDL、项目设置、.NET 安装,甚至是外部 .dll。

尝试读取或写入受保护的内存。这通常表明其他内存已损坏

如果这肯定是由于 WPF 窗口而发生的,请确保您已经仔细检查了这些线索,因为此异常是由计算机上从任何地方分配的受保护内存引起的。

于 2021-07-27T08:36:31.470 回答