首先介绍下,如何手动添加控件到Grid中:
1. 在xaml中添加一个Grid:
2. 通过xaml.cs文件的构成函数中添加需要的行列。
const int HORZ_TILES = 2; const int VERT_TILES = 2; public MainPage() { InitializeComponent(); for (int col = 0; col < HORZ_TILES; col++) { ColumnDefinition coldef = new ColumnDefinition(); coldef.Width = new GridLength(1, GridUnitType.Star); playGrid.ColumnDefinitions.Add(coldef); } for (int row = 0; row < VERT_TILES; row++) { RowDefinition rowdef = new RowDefinition(); rowdef.Height = new GridLength(1, GridUnitType.Star); playGrid.RowDefinitions.Add(rowdef); } }
现在,Grid中就有了 2行2列的区域。如果Grid中没有添加控件的Tile,默认系统会隐藏,所有,如果为添加控件进入各自的Tile,是不会有效果的。
3. 看看具体的插入method。(以插入image为例)
void GenerateImageTile(BitmapSource tile, int row, int col) { Image img = new Image(); img.Stretch = Stretch.None; img.Source = tile; img.Margin = new Thickness(MARGIN); tileImages[row, col] = img; // 这个是用于保存各Tile中的图片 Grid.SetRow(img, row); Grid.SetColumn(img, col); playGrid.Children.Add(img); }
ok,Grid的手动添加数据实现完成。
接着,介绍下Grid.SetColumn和Grid.SetRow,这也是我这篇文章的重点。
首先,我们插入三幅图片分别到(0,0),(0,1),(1,0)中,现在(1,1)区域是空的。
那么我们要做的功能是,当点击某一个区域的时候,用此区域的图片去填充空白区域。这里就需要注意了。Grid的刷新机制。
实现其实很简单,但只要的时每次没有必要掉用这两个函数。
tileImages[emptyRow, emptyCol] = tileImages[touchedRow, touchedCol]; Grid.SetColumn(tileImages[emptyRow, emptyCol], emptyCol); Grid.SetRow(tileImages[emptyRow, emptyCol], emptyRow); tileImages[touchedRow, touchedCol] = null;
如果点击的时同一row的区域,那么之需要调用Grid.SetColumn即可。这样就设置了空白页的image。
如果点击的时同一column,则调用rid.SetRow。
Gird是默认在其后添加数据的,所以这样的设置也就是在此行或此列的最后一个Tile。
那么如果修改的时非同行非同列,比如(1,1)是空白区域,现在点击(0,0)。那么就必须调用两个函数才可实现刷新。
还有,当用某一个区域去设置另一个区域的时候,Grid默认的就将源区域的image清空。
< 完>