본문 바로가기

자기개발/WPF

지금까지 공부한 내용(XAML)

C# 과 더불어 WPF를 공부하기 위해 XAML을 공부했었다. 오늘 포스팅하는 내용도 어제와 더불어 지금까지 공부한 내용을 복습 차원에서 다시 정리해보려고 한다.


  • XAML 네임 스페이스 
    • C# 코드의 using 키워드와 같이 XAML 네임스페이스의 사용을 선언(값은 URL)
    • xmlns 특성이 요소에 추가되면 이 요소와 해당 하위 요소에 기본적으로 해당 URL이 접두어로 추가된다는 것을 의미
    • xmlns:somthing 특성은 무언가에 접두어가 붙은 모든 요소 앞에 실제로 해당 URL 접두어가 있음을 의미 
    • Name 특성을 통해 XAML 파일에서 선언한 객체를 코드 비하인드에서 조작하거나 단순히 XAML 요소 일부를 다른 XAML 요소를 참조할 수 있음
    • 코드 비하인드에서 InitializeComponent() 호출은 'XAML 상태에 대한 수행'을 의미한다. 엄밀히 말하면 비주얼 스튜디오에 의해 기본적으로 화면 생성자에 배치   
<Button>Hallo!
<Button.Language>
	de-DE
</Button.Language>
</Button>
<Button Language = "de-DE">Hallo!</Button>

위의 두 코드는 같은 의미를 나타낸다 

 

 

  •  Name vs x:Name
    • Name : WPF내의 FrameworkElement가 갖는 Property의 하나. Binding등 WPF의 주된 특징들을 수행하기 위해서 (XAML 코드 상에서 뿐 아니라) Runtime에도 계속 보존되어야 할 Property가 필요했던 것.
    • x:Name : XAML 상에서 각각의 Item들에게 이름을 붙여줄 수 있는 Attribute로서, 단순히 이름을 붙여줌과 동시에 핵심기능은 Code-behind에서 해당 Item을 참조할 수 있는 Field를 만들어주는 것 
    • 평소에는 WPF Framework 자체가 Name과 X:Name을 하나로 Mapping 시켜주어서, 어떤 걸 사용하더라도 본래 WPF의 Name의 기능과 XAML의 x:Name의 기능을 다 수행할 수 있도록 해준 덕분에 아무거나 써도 큰 문제는 없다. 단 XAML상에서 UIElement가 아니라서(FrameworkElement의 상속을 받지 않아서) 애초에 Class의 Item이 'Name'이라는 Property를 가지고 있지 않은 경우에는 X:Name을 사용하면 된다. 
  • 패널 컨트롤
    • 하나의 컨트롤만 허용하는 여러 개의 컨트롤을 표시(Button 컨트롤 내부 및 페이지 또는 창 내부의 이벤트)
    • 사용 가능한 크기에 따라 컨트롤(반응형 디자인)
  • 패널 컨트롤 종류
    1. Canvas
      • Canvas 패널을 사용하면 자체 좌표를 제공하는 컨트롤을 배치할 수 있음
      • 자기 자식에 의해 컨트롤의 크기가 정해짐
      • 내부 컨트롤의 위치는 Canvas.Left 및 Canvas.Top
    2. StackPanel
      • 컨트롤을 하단에서 상단으로 쌓아서 각 컨트롤에 전체 너비를 할당
      • Orientation 속성을 통해 방향 변경 가능
    3. DockPanel
      • Dockpanel에 컨트롤을 배치하기 위해서 DockPanel.Dock연결 속성에 연결하기만 하면 됨
      • LastChildFill 속성을 true로 하면 마지막 배치한 자식이 남아있는 전체 공간에 채워짐
    4. WrapPanel
      • 컨트롤은 왼쪽에서 오른쪽 방향으로 배치, 모든 너비가 사용돼 오른쪽 끝에 이르면 왼쪽으로 돌아감
    5. UniformGrid
      • 컨트롤의 개수에 맞게 알아서 행과 열의 수를 계산함(행과 열의 수에 제한을 둘 수도 있음)
      • ex) 9개의 자식이 있고 Columns 속성에 2값을 제공하면 5줄과 2열을 사용해 컨트롤을 완성
    6. Grid
      • 컨트롤은 자신이 속한 전체 칸을 채움
      • 같은 칸에 속한 컨트롤이 각기 다른 컨트롤 상단에 나타남
      • 컨트롤은 Grid.rowSpan 및 Grid.ColumSpan 연결 속성을 사용해 몇 개의 열이나 행을 채울 수 있음
      • 고정 숫자 : 열/행에 픽셀의 수를 할당
      • Auto : 열/행이 자체 콘텐츠에 대한 크기로 적용
      • 별도는 별이 붙은 숫자 : 열/행이 남은 너비 높이에 비례한 크기가 지정
  • Data Binding
    • WPF 데이터 바인딩을 사용하려면 항상 대상과 원본이 있어야 함
    • 바인딩의 일반적인 구성 요소 : 바인딩 대상 개체, 대상 속성, 바인딩 소스, 사용할 바인딩 소스에 있는 값 경로
    • 예를 들어 TextBox의 콘텐츠를 Employee.Name  속성에 바인딩 하려면 대상 개체는 TextBox이고, 대상 속성은 Text 속성이고, 사용할 값은 Name이고, 소스 개체는 Employee 개체이다. 
    • 바인딩 소스 지정 방법 : DataContext 속성 사용, 개별 바인딩 선언, 값 경로 지정