我有一个WPF网格我想在运行时插入一些图像。
的MSDNhttp://msdn.microsoft.com/en-us/library/system.windows.controls.grid%28v=vs.110%29.aspx
给出了这个例子,使用文本而不是图像,但我认为概念是相同的。 。 。
// Create the application's main window
mainWindow = new Window();
mainWindow.Title = "Grid Sample";
// Create the Grid
Grid myGrid = new Grid();
myGrid.Width = 250;
myGrid.Height = 100;
myGrid.HorizontalAlignment = HorizontalAlignment.Left;
myGrid.VerticalAlignment = VerticalAlignment.Top;
myGrid.ShowGridLines = true;
// Define the Columns
ColumnDefinition colDef1 = new ColumnDefinition();
ColumnDefinition colDef2 = new ColumnDefinition();
ColumnDefinition colDef3 = new ColumnDefinition();
myGrid.ColumnDefinitions.Add(colDef1);
myGrid.ColumnDefinitions.Add(colDef2);
myGrid.ColumnDefinitions.Add(colDef3);
// Define the Rows
RowDefinition rowDef1 = new RowDefinition();
RowDefinition rowDef2 = new RowDefinition();
RowDefinition rowDef3 = new RowDefinition();
RowDefinition rowDef4 = new RowDefinition();
myGrid.RowDefinitions.Add(rowDef1);
myGrid.RowDefinitions.Add(rowDef2);
myGrid.RowDefinitions.Add(rowDef3);
myGrid.RowDefinitions.Add(rowDef4);
// Add the first text cell to the Grid
TextBlock txt1 = new TextBlock();
txt1.Text = "2005 Products Shipped";
txt1.FontSize = 20;
txt1.FontWeight = FontWeights.Bold;
Grid.SetColumnSpan(txt1, 3);
Grid.SetRow(txt1, 0);
网格绘制得很好但没有文字出现。我无论如何都不理解它,因为示例的Text部分没有引用" myGrid" - 它如何知道被引用的网格?我试过更换Grid"用" myGrid"但是编译器只是说" 无法使用实例引用访问;使用类型名称来限定"。
那么怎么做我在运行时将一个项插入任意Grid坐标?
答案 0 :(得分:1)
唯一缺少这个例子的是
Grid.Children.Add(txt1);
在最后。基本上,您可以在控件上使用Grid.SetRow
,Grid.SetColumn
,Grid.SetRowSpan
和Grid.SetColumnSpan
来设置它在网格中的位置以及它将占用多少个单元格,然后您只需Add
将其Children
添加到网格Grid
即可实际显示。
因此,如果您想在运行时向{{1}}添加任意控件,只需使用这些函数即可设置。
答案 1 :(得分:1)
你错过了这个例子的关键路线:
myGrid.Children.Add(txt1);
实际上将文本块放入布局中(通过将其添加到网格中)。
您无法在函数调用中使用myGrid
的原因是Grid.Row
和Grid.Column
附加属性您没有设置它们的方式你会想到(或者像你想象的那样在XAML中设置它们)。有关其工作原理的更多信息,请参阅MSDN(链接到SetColumn函数)。
" Grid"控件查看其子项的附加属性并相应地放置项目,因此在设置列/行时您不需要引用myGrid1
。
附加属性的MSDN:http://msdn.microsoft.com/en-us/library/ms749011(v=vs.110).aspx