2014년 5월 11일 일요일

[일기] 드로잉 복습, ColumnSpan, RowSpan

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ClientBingo
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Canvas c = new MyCanvas();
            Grid myGrid = new Grid();

            RowDefinition row3 = new RowDefinition();
            row3.Height = new GridLength(200, GridUnitType.Pixel);
            //Grid.SetRowSpan(c, 2);
         
            RowDefinition row = new RowDefinition();
            row.Height = new GridLength(1, GridUnitType.Star);
            RowDefinition row2 = new RowDefinition();
            row2.Height = new GridLength(1, GridUnitType.Star);
            ColumnDefinition col = new ColumnDefinition();
            col.Width = new GridLength(1, GridUnitType.Star);
            ColumnDefinition col2 = new ColumnDefinition();
            col2.Width = new GridLength(1, GridUnitType.Star);


            myGrid.RowDefinitions.Add(row3);
            myGrid.RowDefinitions.Add(row);
            myGrid.RowDefinitions.Add(row2);

            myGrid.ColumnDefinitions.Add(col);
            myGrid.ColumnDefinitions.Add(col2);

         

            TextBlock txt = new TextBlock();
            txt.Background = Brushes.AliceBlue;
            txt.Text = "Row " + Convert.ToString(32);

            Grid.SetRow(txt, 0);
            Grid.SetColumn(txt, 0);
            Grid.SetColumnSpan(txt, 2);
            myGrid.Children.Add(txt);

            Grid.SetRow(c, 0);
            Grid.SetColumn(c, 0);
            myGrid.Children.Add(c);

            //c = new MyCanvas();

            //Grid.SetRow(c, 1);
            //Grid.SetColumn(c, 1);
            //myGrid.Children.Add(c);


            myGrid.ShowGridLines = true;

            this.Content = myGrid;
        }
    }
}


[Canvas.cs]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace ClientBingo
{
    class MyCanvas : Canvas
    {
        protected override void OnRender(System.Windows.Media.DrawingContext dc)
        {
            base.OnRender(dc);
            Background = Brushes.Black;
            dc.DrawLine(new Pen(Brushes.Aqua, 2.0), new Point(2.0, 2.0), new Point(413.0, 213.0));
        }
    }
}




결과를 보건대, Grid에 추가는 중복으로 가능한 듯 하며, 나중에 추가될수록 위로 덮힌다. 그리고 영향력은 Grid의 영역을 초과하는 것이 가능하지만, 일반적인 경우 한정된 공간만큼 제한되는 듯 하다.

코드에 분명히 canvas와 textbloc을 row 0과 column 0에 대입했다. 다 그려지며, txt는 columnspan = 2로 2개 영역에 걸쳐 그려지는 반면, canvas는 1개 영역에만 그려진다. 하지만 그려진 직선은 영역을 벗어나서도 그려지는 것이 보인다...

하지만 이것은 그곳에 추가된 영역이 없을 때(?) 그러한 듯하다.

가령 위 진한 주석을 풀면,

이와 같이 되었다.

 물론,
c = new MyCanvas(); //이것을 새로 해주어야 했다. 같은 객체를 다른 곳에 추가하려 하니 에러가 발생했다.

            Grid.SetRow(c, 1);
            Grid.SetColumn(c, 1);
            myGrid.Children.Add(c);

댓글 없음:

댓글 쓰기