2014-10-14 4 views
0

Я только начал заниматься C# и WPF.C# и WPF: элементы управления недоступны из другого класса

Предположим, что я хочу создать черную сетку и что я хочу случайным образом перемещаться по красной площади в указанной сетке.

В настоящее время я могу в принципе делать все, что я хочу до тех пор, пока я все в «MainWindow.xaml.cs» ...

Теперь моя проблема заключается в том, что если я создаю новый класс (например, «MakeStuffHappen .cs "), и из него я пытаюсь получить доступ к Grid (именуемому« MyGrid »), который будет создан экземпляром MainWindow, intellisense не« видит »его. Я попытался создать геттер, который возвращает «MyGrid», но затем компилятор говорит, что «для ссылки на объект не требуется статическое поле, метод или свойство» ProjectName.MainWindow.getGrid(). Очевидно, что я не могу определить MainWindow как статический класс ...

Любые советы о том, как решить эту проблему?

Спасибо!

PS поскольку я не являюсь, очевидно, не программист, я не всегда осведомлены о технических терминов, используемых при поиск информации ... поэтому я заранее извиняюсь, если этот вопрос уже задан.

P.P.S. Я видел это: Access MainWIndow Control from a class in a separate file, но это не помогает.

+3

С таким уровнем знаний, я думаю, вам лучше читать C# t прежде чем перейти к фактическому кодированию. – Gebb

+0

Вы можете сделать статический экземпляр вашего элемента управления в MainWindow.cs и называть его как MainWindow.yourControl – Sybren

+2

@Sybren Почему вы * когда-либо * статичным членом класса UI? Почему бы просто не передать экземпляр при его создании, а затем вызвать общедоступный метод? – BradleyDotNET

ответ

2

После того, как ваш вид инициализации (когда OnInitialized срабатывает событие) вы можете передать инициализированную сетку в свой класс помощника:

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. 
    } 
} 
Смежные вопросы