【问题标题】:System.NullReferenceException when initialization [duplicate]初始化时的 System.NullReferenceException [重复]
【发布时间】:2016-08-08 09:44:43
【问题描述】:

我有一个名为“mainWindow”的窗口,其中有两个名为“mainFrame”、“sidepanel”的框架,在“mainWindow”中,当我从“sidepanel”单击“btn1”时,“mainFrame”导航到“frame1”,即页面。在“frame1”中,我有一个边框控件作为唯一的孩子。

mainWindow.xaml.cs:

((mainWindow)App.Current.MainWindow).mainFrame.Navigate(new frame1());

frame1.xaml:

<Border>
</Border>

frame1.xaml.cs:

public frame1()
{
    InitializeComponent();
    var page = ((mainWindow)App.Current.MainWindow).mainFrame.Content as Page;
    var border = page.Content as Border;
}

将边框初始化为 page.Content=null 时出现“System.NullReferenceException”。但是,如果我第二次单击“btn1”,它将使用“System.Windows.Controls.Border”进行初始化。但是当我第一次点击“btn1”时,我想要这个结果。

请帮我一个好的解决方案。

【问题讨论】:

  • 和问题没有直接关系,但((mainWindow)App.Current.MainWindow).mainFrame.Content不应该是frame1吗?省去自己的痛苦,直接拨打this.Content
  • 就问题本身而言,您可能在页面生命周期中过早地尝试访问内容。尝试将您的代码移动到 Loaded 事件中

标签: c# wpf xaml navigation


【解决方案1】:

正如@KooKiz 建议的那样,这个给了我解决方案:

frame1.xaml.cs:

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    var page = ((mainWindow)App.Current.MainWindow).mainFrame.Content as Page;
    var border = page.Content as Border;
}

frame1.xaml:

<Page Loaded="Page_Loaded">
    <Border></Border>
</Page>

【讨论】:

  • 抱歉坚持,但是...var border = this.Content as Border;
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 2013-02-10
  • 2018-09-04
  • 2014-07-17
  • 1970-01-01
相关资源
最近更新 更多