public ChessBoardUserControl()
        {
            InitializeComponent();

            int row;
            int column;

            for (row = 0; row < 8; row++)
            {
                RowDefinition r = new RowDefinition {
                    Height = new GridLength(1, GridUnitType.Star)
                };
                ChessBoardGrid.RowDefinitions.Add(r);
            }

            for (column = 0; column < 8; column++)
            {
                ColumnDefinition c = new ColumnDefinition {
                    Width = new GridLength(1, GridUnitType.Star)
                };
                ChessBoardGrid.ColumnDefinitions.Add(c);
            }

            ColumnDefinition restColumn = new ColumnDefinition {
                Width = GridLength.Auto
            };

            ChessBoardGrid.ColumnDefinitions.Add(restColumn);

            Field = new ChessFieldUserControl[8, 8];

            for (row = 0; row < 8; row++)
            {
                for (column = 0; column < 8; column++)
                {
                    ChessFieldUserControl field = new ChessFieldUserControl(row, column, this);

                    Field[row, column] = field;

                    ChessBoardGrid.Children.Add(field);

                    Grid.SetRow(field, 7 - row);
                    Grid.SetColumn(field, column);
                }
            }

            ChessCommandUserControl = new ChessCommandUserControl();
            ChessBoardGrid.Children.Add(ChessCommandUserControl);
            Grid.SetColumn(ChessCommandUserControl, 8);
            Grid.SetRow(ChessCommandUserControl, 0);
            Grid.SetRowSpan(ChessCommandUserControl, 6);
        }
        public void SetField(ChessFieldUserControl field)
        {
            bool reset = true;

            if (field != null)
            {
                if (StartField == null)
                {
                    StartField = field;
                    StartField.SetFieldColor(FieldColor.Start);

                    ChessCommandUserControl.SetStartField((char)(StartField.Column + 65) +
                                                          (StartField.Row + 1).ToString());
                    reset = false;
                }
                else if (EndField == null)
                {
                    EndField = field;
                    EndField.SetFieldColor(FieldColor.End);

                    ChessCommandUserControl.SetEndField((char)(EndField.Column + 65) + (EndField.Row + 1).ToString());

                    reset = false;
                }
            }

            if (reset)
            {
                StartField?.SetFieldColor(FieldColor.Standard);
                EndField?.SetFieldColor(FieldColor.Standard);

                ChessCommandUserControl.SetStartField("");
                ChessCommandUserControl.SetEndField("");

                StartField = null;
                EndField   = null;
            }
        }