C# 异常:如果VisualChildrenCount返回零,则不要调用此方法。尝试更改用户控件的可见性时

C# 异常:如果VisualChildrenCount返回零,则不要调用此方法。尝试更改用户控件的可见性时,c#,wpf,exception,user-controls,code-behind,C#,Wpf,Exception,User Controls,Code Behind,我在WPF(C#)中的窗口中添加了一个自定义用户控件。 当我试图在代码隐藏中更改控件的可见性时,应用程序抛出异常 发生System.ArgumentOutOfRange异常 指定的索引超出范围或索引处的子级为空。如果VisualChildrenCount返回零,表示该可视化对象没有子对象,则不要调用此方法 编辑:相关代码(大代码中的片段) XAML: 这是main窗口 单击关闭按钮后。异常被抛出。继续时,UI将变为空白。 我认为您正在加载控件之前调用someFn方法。 在执行Initializ

我在WPF(C#)中的窗口中添加了一个自定义用户控件。 当我试图在代码隐藏中更改控件的可见性时,应用程序抛出异常

发生System.ArgumentOutOfRange异常 指定的索引超出范围或索引处的子级为空。如果VisualChildrenCount返回零,表示该可视化对象没有子对象,则不要调用此方法

编辑:相关代码(大代码中的片段)

XAML:

这是
main窗口

单击关闭按钮后。异常被抛出。继续时,UI将变为空白。

我认为您正在加载控件之前调用
someFn
方法。 在执行
InitializeComponents()
完成之前,不要更改控件的可见性

编辑: 如上所述,您试图在加载该组件之前设置UserControl的可见性。 原因是您在
Windows\u Loaded
函数中提到的代码是在
InitializeComponents()
之前执行的。因此,当按下关闭按钮时,数据不会加载到usercontrol中,因此也不会加载到ex中


Fix:要解决此问题,只需在注释中提到的调用
InitializeComponents()
之后,将
窗口加载的
中的代码移动到
构造函数中。

只需在窗口加载的内部添加即可

 if(multipleLinesView.IsLoaded){
    DoThings(...);
 }

发布相关代码。第一次显示用户控件没有问题。我有一个隐藏用户控件的按钮。试图隐藏控件时,
UserControl\u IsVisibleChanged
方法会引发上述异常。如果看不到整个代码,则无法说明问题是如何引起的。按钮是在控件内还是在控件外?调用
InitializeComponents()
后,只需将
窗口中加载的代码移动到
构造函数中,并告知问题是否仍然存在。还要指定捕获异常的行。是的。。在移动代码之后,它就工作了。你能解释一下区别吗?@SabhareeshRavichandran:如果你的问题已经解决,你可以点击绿色的勾号,将这个答案标记为正确答案,这样对其他面临同样问题的人会有帮助。
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        MultipleLinesViewModel vModel = new MultipleLinesViewModel();
        Color sColor = Colors.Lime;
        multipleLinesView.CreateSeries("test", sColor, true);
        multipleLinesView.AttachData("test", ref vModel);

        MultipleLinesViewModel vModelTest = new MultipleLinesViewModel();
        Color tColor = Colors.MediumPurple;
        multipleLinesView.CreateSeries("test2", tColor, true);
        multipleLinesView.AttachData("test2", ref vModelTest);
    }
}
 if(multipleLinesView.IsLoaded){
    DoThings(...);
 }