【问题标题】:C# and WPF: controls inaccessible from another classC# 和 WPF:无法从另一个类访问控件
【发布时间】:2014-10-14 19:37:49
【问题描述】:

我刚开始摆弄 C# 和 WPF。

假设我想实例化一个黑色网格,并且我想在所述网格中随机移动一个红色方块。

目前我基本上可以做任何我想做的事,只要我把所有东西都保存在“MainWindow.xaml.cs”中......

现在,我的问题是,如果我创建一个新类(例如“MakeStuffHappen.cs”)并从中尝试访问将由 MainWindow 的构造函数实例化的网格(名为“MyGrid”),智能感知不会t“看到”它。 我尝试制作一个返回“MyGrid”的getter,但编译器说“非静态字段、方法或属性'ProjectName.MainWindow.getGrid()'需要对象引用。 显然我不能将 MainWindow 定义为静态类...

关于如何解决这个问题的任何提示?

谢谢!

附:由于我显然不是程序员,因此我不一定知道在查找信息时要使用的技术术语......所以如果已经问过这个问题,我提前道歉。

附言我看到了这个:Access MainWIndow Control from a class in a separate file 但它没有帮助。

【问题讨论】:

  • 有了这样的知识水平,我想你最好在开始实际编码之前阅读 C# 教程。
  • 您可以在 MainWindow.cs 中创建控件的静态实例,并像 MainWindow.yourControl 一样调用它
  • @Sybren 为什么曾经为 UI 类创建静态成员?为什么不直接在创建实例的时候传入,然后调用公共方法呢?
  • 考虑通过公共方法启动故事板。如果移动必须是随机的仍然通过公共方法启动它,然后在MainWindow而不是MakeStuffHappen中处理它。
  • @Gebb:虽然您所说的绝对正确,但如果您提及要查找的特定 C# 主题或一般 OOP 概念,我将不胜感激。不过还是谢谢。我会这样做,并尝试其他人的建议。

标签: c# wpf windows scope visual-studio-express


【解决方案1】:

一旦你的视图被初始化(当 OnInitialized 事件触发时)你可以将初始化的 Grid 传递给你的帮助类:

MainWindow.xaml.cs:

public partial class MainWindow 
{
    MakeStuffHappen helper = null;
    public MainWindow()
    { 
       OnInitialized += (s,e)=> { helper = new MakeStuffHappen(this.MyGridName); } 
    }
}

MakeStuffHappen.cs

public class MakeStuffHappen
{
    Grid theGrid = null;
    public MakeStuffHappen(Grid grid)
    {
        theGrid = grid;
        // Do stuff with the grid.
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多