此刻我真的很绝望。我正在编写一个WPF程序。我根据数据库中存储的元素数量,动态地在网格标签内构建了一个简单的XAML-construct
和生成的网格。即使我定义了Label并将其命名为label,我也得到System.InvalidOperationException
。我找到了这个解决方案here。我的实际问题是,我需要在此网格中获取标签的内容。我把这个问题与我所链接的问题完全相似。
我希望你理解我的意思。
这是我的代码:
for (int i = 0; i < numberOfBooks; i++)
{
Grid grid = new Grid();
RowDefinition row = new RowDefinition();
ColumnDefinition column = new ColumnDefinition();
ColumnDefinition column2 = new ColumnDefinition();
ColumnDefinition column3 = new ColumnDefinition();
Label label = new Label();
label.Content = Books[i].Titel;
upperGrid.RowDefinitions.Add(row);
grid.ColumnDefinitions.Add(column);
grid.ColumnDefinitions.Add(column2);
grid.ColumnDefinitions.Add(column3);
Grid.SetRow(label, i);
Grid.SetColumn(label, 0);
Grid.SetRow(grid, i);
upperGrid.Children.Add(grid);
grid.Children.Add(label);
grid.MouseLeftButtonDown += (sen, evg) =>
{
Label lbl = grid.Children.OfType<Label>().First(k => k.Name=="label"); //Here I get the exception
string result = lbl.Name.ToString();
Console.WriteLine(result);
};
}
答案 0 :(得分:2)
首先会抛出。使用FirstOrDefault
将返回default<T>
和null-conditional operator(?.
):
Label lbl = grid.Children.OfType<Label>().FirstOrDefault(k => k.Name=="label");
string result = lbl?.Name.ToString();
Console.WriteLine(result);
但是,由于这是一个WPF项目,我建议使用MessageBox
或类似的东西来显示结果,而不是Console.WriteLine
,如下所示:
首先将其添加到using
指令中:
using System.Windows;
然后:
MessageBox.Show(result);