C# I';我试图通过按钮单击事件访问主窗口内的对象,但我';我在可访问性方面有问题
这是一个3D光线跟踪程序,在开始渲染之前,我很难添加到SceneObject列表中 我有我的主窗口,其中有一个场景类,然后包含SceneObject列表。在另一个窗口中,我允许用户通过按钮单击事件将球体添加到此列表中 在我的事件中,我尝试这样做:C# I';我试图通过按钮单击事件访问主窗口内的对象,但我';我在可访问性方面有问题,c#,wpf,C#,Wpf,这是一个3D光线跟踪程序,在开始渲染之前,我很难添加到SceneObject列表中 我有我的主窗口,其中有一个场景类,然后包含SceneObject列表。在另一个窗口中,我允许用户通过按钮单击事件将球体添加到此列表中 在我的事件中,我尝试这样做: private void addASphere(object sender, RoutedEventArgs e) { #Some calculation to define sphere MainWindow.scene.AddObject(
private void addASphere(object sender, RoutedEventArgs e)
{
#Some calculation to define sphere
MainWindow.scene.AddObject(sphere);
}
此错误为“MainWindow.scene由于其保护级别而不可访问”。我不知道该怎么办,我试着把这个场景公之于众,然后是静态的(但没有成功)。任何帮助都将不胜感激
如果有任何用途,主窗口和场景的设置如下:
public partial class MainWindow : Window
{
Scene scene;
#All the Mainwindow code here
}
class Scene
{
public void AddObject(SceneObjects newObject)
{
if (newObject != null)
{ Objects.Add(newObject); }
}
#All the Scene code here
}
您需要将
场景
成员公开:
public partial class MainWindow : Window {
public Scene scene;
}
但是,通常建议使用公共属性而不是公共成员:
public partial class MainWindow : Window {
public Scene scene { get; set; };
}
最后,通常的命名C#约定是对属性使用Pascal大小写:
public partial class MainWindow : Window {
public Scene Scene { get; set; };
}
将
场景
公开,然后项目中的任何代码都可以获取主窗口并将其转换为实际的主窗口类型,然后获取场景
,如下所示:(App.Current.MainWindow作为主窗口)。场景
。您应该使用MVVM来实现这一点,但首先需要了解类和类实例之间的区别。他们是不同的。你住在一栋房子的某个特定实例中。我也是。如果我铲掉前面的台阶,你的台阶上的雪会被铲掉吗?不。两个都是房子,但不是同一个房子。主窗口。场景
就像说“房子前面的台阶”。如果你想走上一组实际的台阶,你需要选择一座真正存在的房子,去那里,然后走上那些实际的台阶。另请参阅