我是新來的編程和學習C#試圖在WPF中創建一個Sudoku遊戲。此刻,試圖通過使用一個採用行和列座標的Position方法來顯示TextBlock(構成每個單元格的控件)信息。在wpf中創建對象時,爲什麼要循環回到MainWindow?
但是,當啓動代碼時,MessageBox.Show()命令從不執行。通過它似乎只要它嘗試創建Grid對象,它立即跳回到公共MainWindow()行,結果MessageBox命令從不發生。我懷疑的一點是它與從MainWindow繼承的Grid.cs有關,但我認爲這是適當的,所以我可以引用xaml對象。還有什麼可能導致這個循環?
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();
}
}
}
此外,運行代碼似乎導致一些快速的垃圾收集,這是我無法理解: https://i.imgur.com/9bXuezQ.png
如果我要在其他非MainWindow類中引用xaml對象,我是否還需要通過via方法傳遞相關對象?這可能是一個涉及到的問題,需要更多的信息;我只想知道我的選擇範圍。 –
您可以使這些對象在MainWindow.xaml.cs中公開或保護,然後通過使用MainWindow.ObjectName直接從Grid引用它們。 – mattshu