Je suis nouveau dans la programmation et l'apprentissage de C# en essayant de créer un jeu de Sudoku dans WPF. À l'heure actuelle, essayez de voir si je peux afficher TextBlock (le contrôle qui compose chaque cellule) des informations en utilisant une méthode de Position qui prend des coordonnées de ligne et de colonne.Pourquoi suis-je en boucle sur MainWindow lors de la création d'un objet dans wpf?
Toutefois, la commande MessageBox.Show() ne s'exécute jamais lorsque je lance le code. Il semble que, dès qu'il essaie de créer l'objet Grid, il revient immédiatement à la ligne publique MainWindow(), et par conséquent la commande MessageBox ne se produit jamais. Un de mes soupçons est que cela a à voir avec Grid.cs héritant de MainWindow, mais j'ai pensé que c'était approprié afin que je puisse référencer les objets xaml. Quoi d'autre pourrait causer cette boucle?
MainWindow.xaml.cs:
using System.Windows;
namespace Sudoku
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitializeGame();
}
private void InitializeGame()
{
var Grid = new Grid();
MessageBox.Show(Grid.Position(2, 5).Name);
}
}
}
Grid.cs:
using System.Windows.Controls;
namespace Sudoku
{
public class Grid : MainWindow
{
/// Returns a TextBlock cell object at a specified row and column coordinate.
public TextBlock Position(int row, int column)
{
return GameGrid.Children
.Cast<TextBlock>()
.Where(e => System.Windows.Controls.Grid.GetRow(e) == row && System.Windows.Controls.Grid.GetColumn(e) == column)
.Single();
}
}
}
En outre, l'exécution du code semble causer une collecte des ordures rapide, que je ne comprends pas: https://i.imgur.com/9bXuezQ.png
Si je dois référencer des objets xaml dans d'autres classes non MainWindow, dois-je également passer les objets pertinents dans les méthodes via? Il est possible qu'il s'agisse d'une question complexe nécessitant plus d'informations. Je veux juste savoir quelle est la portée de mes options. –
Vous pouvez rendre ces objets publics ou protégés dans MainWindow.xaml.cs, puis les référencer directement depuis Grid à l'aide de MainWindow.ObjectName. – mattshu