private void InvokeDraw_ColorText() { //string Text = ""; Paragraph TextBlock = new Paragraph(); void AddText(string text, Color?color = null) { Run run = new Run(text); if (color != null) { run.Foreground = GetBrush(color ?? Colors.Black); } //Text += text; TextBlock.Inlines.Add(run); } TetrisBlock[,] TetrisView = Tetris.GetView(); int Width = TetrisView.GetLength(0); int Height = TetrisView.GetLength(1); TetrisBlock[,] FigureView = Tetris.NextFigure?.GetView(); for (int Y = 0; Y < Height; Y++) { if (TextBlock.Inlines.Count() > 0) { AddText("\n"); } for (int X = 0; X < Width; X++) { if (TetrisView[X, Y] != null) { AddText("XX", TetrisView[X, Y].Color); } else { AddText("---", Colors.LightGray); } } AddText(Tetris.Lines >= Height - Y ? " + " : " - "); switch (Y) { case 1: AddText(" State: " + Tetris.State.ToString()); break; case 3: AddText(" Level: " + Tetris.Level.ToString()); break; case 5: AddText(" Score: " + Tetris.Score.ToString()); break; case 7: AddText(" Next figure: "); break; default: const int FirstLine = 9; if (FigureView != null && Y >= FirstLine && Y < FirstLine + FigureView.GetLength(1)) { AddText(" "); int FigureY = Y - FirstLine; for (int FigureX = 0; FigureX < FigureView.GetLength(0); FigureX++) { if (FigureView[FigureX, FigureY] != null) { AddText("XX", FigureView[FigureX, FigureY].Color); } else { AddText("---", Colors.White); } } } break; } } FlowDocument Document = new FlowDocument(); Document.Blocks.Add(TextBlock); //Tank.Text = Text; //ColorTank.Document = Document; }