프로젝트 구조
Element
- TextBox : 글 입력용 박스
- ScrollViewer : 스크롤 창
- StackPanel : 여러개의 Element를 Children으로 가질수 있다.
- TextBlock : 문자열을 담는 공간
Property
- Margin : Thickness 로 지정
- Color : SolidColorBrush 로 지정
- ColorConverter.ConvertFromString : #000000 과 같이 색상 지정, Color로 캐스팅 필요
Xaml 로 UI 작성하기
- Xaml은 마크업 언어로 UI에 대한 정보를 담고 있다.
- 좌측의 도구상자를 이용 GUI 환경에서 UI를 구성할수 있다.
Grid
<Grid.ColumnDefinition> </Grid.ColumnDefinition>
- Grid의 열을 정의한다.
- 내부에 ColumnDefinition 태그를 사용해 열의 추가가 가능하다.
<Grid.RowDefinition> </Grid.RowDefinition>
- Grid의 행을 결정한다.
- 내부에 RowDefinition 태그를 사용해 행의 추가가 가능하다.
사용법
- Grid 내부에 태그를 하나 두고 거기에 Grid.Row 와 Grid.Column 값을 통해 값이 들어갈 Grid를 정한다.
<Label Grid.Row="1" Grid.Column="1" Content="Hello World" />
// 2행 2열에 Hello world 가 들어간다 ( Grid의 행/열은 0부터 시작 )
크기 정하기
- Definition에 Width/Height에 픽셀 수 대신 auto를 적으면 자동으로 사이즈를 정해준다.
- *를 적으면 남은 공간을 전부 사용하게 된다.
- 3와 같이 적을시 여러개의 중에서 공간을 더 차지하게 설정할수 있다.
ColumnSpan / RowSpan
- 컨텐츠가 n개의 컬럼을 차지할수 있도록 하는것.
- Row/Col 위치를 정하고 ColumnSpan 을 추가한다.
<Label Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Content="Example" />
// 2행 2열부터 시작하여 2칸의 열을 차지하는 Label
cs 파일에 요소 만들기
Button b = new Button(); // 버튼
b.Content = "B"; // 내부 글자 정하기
Grid.SetRow(b, 2);
Grid.SetColumn(b, 2);
// 그리드 내부에서의 위치 정하기
Grid myGrid = (Grid)FindName("myGrid")
// 그리드 찾아오기 < Grid에 Name속성 추가 필요함! >
myGrid.Children.Add(b);
// 찾아온 그리드에 요소를 추가함.
- 요소에 x:Name을 붙혔다면, 사실 FindName으로 쓸 필요 없이 바로 코드에서 Name으로 호출할수 있다.
버튼 이벤트 핸들러
클릭 이벤트
<Button Click="Button_Click" />
- cs 파일에 생긴 메소드에 동작을 추가한다.
- EX. MessageBox.Show("Hello World");
- Hello World가 적힌 창을 하나 띄운다.
요소에 프로퍼티 바로 지정하는 방법
TextBlock example = new TextBlock();
example.Text = "Example"
// 과 같이 지정할수도 있고
TextBlock example = new TextBlock {
Text = "Example",
}
// 과 같이 중괄호를 사용해 프로퍼티를 즉각적으로 적용해줄수도 있다.
// 위 중괄호를 사용할시 다음 프로퍼티 입력을 위해선 세미콜론이 아닌 , 을 사용해야 한다!
요소에 마진/패딩 주는법
TextBox.Margin = new Thickness(10);
// Thickness 를 사용해 지정한다.
ContentControl : 화면에 표시될것들을 지정하기
- 특정 상황마다 화면에 표시되야 할 것이 다를 경우 사용한다.
- Content 프로퍼티를 가져, 이를 통해 표기할 것을 설정할수 있다.
UserControl
- 화면의 일부분을 채우기 위해 사용한다.
- 일종의 컴포넌트이며, ContentControl의 Content로 사용되기도 한다.
- xaml 파일 형식
현재 자신이 위치한 윈도우를 가져오는 방법
Window window = Window.GetWindow(this);
데이터 바인딩
- window에서 this.DataContext를 특정 클래스로 지정한다.
public par