기본-생성-파일과-코드
WPF 프로젝트를 새로 생성하면 Visual Studio에서 자동으로 몇 가지 기본 파일을 생성합니다. 이 파일들은 WPF 애플리케이션의 구조를 구성하며 각각 특정한 역할과 의미를 가집니다. 주요 파일은 다음과 같습니다:
기본 생성 파일
App.xaml 및 App.xaml.cs
- App.xaml: WPF 애플리케이션의 시작 지점입니다. 애플리케이션 전체에 영향을 미치는 리소스(예: 스타일, 테마)를 정의할 수 있습니다. 또한 애플리케이션의 시작 및 종료 이벤트도 여기에 설정됩니다.
- App.xaml.cs:
App.xaml
의 코드비하인드 파일입니다.Application
클래스를 상속하며, 여기서Startup
,Exit
,DispatcherUnhandledException
등의 이벤트 핸들러를 추가할 수 있습니다. 기본적으로MainWindow
를 애플리케이션 시작 시 표시하도록 설정되어 있습니다.
MainWindow.xaml 및 MainWindow.xaml.cs
- MainWindow.xaml: 프로젝트의 메인 윈도우로, 사용자 인터페이스UI 요소를 정의하는 곳입니다. 여기에는 버튼, 텍스트 박스, 레이블 등 다양한 UI 요소를 배치할 수 있습니다. XAML(XML 기반 언어)을 사용해 UI를 선언적으로 정의합니다.
- MainWindow.xaml.cs:
MainWindow.xaml
의 코드비하인드 파일로,MainWindow
클래스의 동작을 정의합니다. 여기에서 UI 요소에 대한 이벤트 핸들러를 작성하여, 사용자 상호작용에 따라 동작하도록 설정할 수 있습니다.
Properties/AssemblyInfo.cs
- 애플리케이션의 어셈블리Assembly 정보를 포함하고 있습니다. 어셈블리의 제목, 설명, 회사, 제품 정보 등을 설정할 수 있으며, 버전 정보와
GUID
같은 고유 식별자도 정의합니다. 이 파일들은 WPF 프로젝트의 기본적인 구조를 형성하며, 프로젝트를 개발하면서 추가적인 윈도우, 페이지, 사용자 컨트롤 등을 추가해 애플리케이션을 확장할 수 있습니다.
App.xaml 기본 생성 코드
<Application x:Class="JustGo_WPF.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyProject_WPF"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
기본 생성된 App.xaml
파일은 WPF 애플리케이션의 진입점 역할을 하며, 애플리케이션 수준의 설정 및 리소스를 관리합니다. 각 속성 및 요소의 역할은 다음과 같습니다:
<Application>
태그
Application
은 WPF 애플리케이션의 루트 요소입니다. 이 요소는 애플리케이션의 라이프사이클을 관리하며, 전체 애플리케이션에 대한 설정 및 리소스를 정의할 수 있는 컨테이너 역할을 합니다.Application
요소는System.Windows.Application
클래스에 매핑됩니다.
x:Class="JustGo_WPF.App"
x
x
는 XAML에서 사용하는 XML 네임스페이스 접두사입니다. XAML에서x:
로 시작하는 속성들은 특별한 XAML 언어 기능을 나타내며, 주로 시스템에서 정의된 특정 기능을 사용할 때 사용됩니다.- 이 선언은 XAML 문서에서
x:
로 시작하는 여러 기능을 사용할 수 있도록 해줍니다.x
는 네임스페이스의 이름일 뿐이며, 다른 이름을 써도 되지만, 관례적으로x
를 사용합니다.
x:Class
x:Class
는x
네임스페이스에서 제공하는 속성 중 하나로, XAML 파일과 코드비하인드 파일을 연결하는 역할을 합니다.- XAML과 해당하는 코드비하인드 파일이 컴파일될 때,
x:Class
로 지정된 클래스는 partial class로 확장되어, XAML의 UI 정의와 코드비하인드의 로직이 하나의 클래스로 동작하게 됩니다. 이로 인해 UI 요소와 코드가 분리되어 있지만, 서로 상호작용할 수 있습니다. - 여기서는
App.xaml.cs
파일이JustGo_WPF.App
클래스로 지정되어 있으며, XAML과 코드비하인드 파일 간의 연결을 나타냅니다.
xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns
는 기본 네임스페이스를 지정하며, WPF에서 제공하는 기본적인 XAML 요소를 사용하기 위해 필요한 네임스페이스입니다.- 이 네임스페이스는 버튼, 텍스트박스 등 WPF의 기본 UI 컨트롤과 레이아웃 요소를 포함하고 있습니다.
xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:x
는 XAML 언어 자체의 기능을 지원하는 네임스페이스입니다.x:Class
,x:Name
,x:Key
와 같은 특별한 XAML 속성을 사용할 수 있게 해줍니다.
xmlns:local=“clr-namespace:JustGo_WPF”
local
네임스페이스는 현재 프로젝트(JustGo_WPF
)의 네임스페이스를 참조하도록 설정된 것입니다.- 이를 통해 XAML에서 현재 프로젝트 내에 정의된 사용자 정의 클래스, 리소스 또는 컨트롤을 참조할 수 있습니다.
StartupUri=“MainWindow.xaml”
StartupUri
는 애플리케이션이 시작될 때 표시할 기본 윈도우를 지정합니다.- 여기서는
MainWindow.xaml
이 시작 창으로 설정되어 있으며, 애플리케이션 실행 시 자동으로 이 창이 표시됩니다. StartupUri
에 다른 창을 지정하여 애플리케이션 시작 시 표시할 창을 변경할 수도 있습니다.
<Application.Resources>
Application.Resources
는 애플리케이션 전체에서 사용할 리소스를 정의하는 영역입니다. 여기에서 정의된 리소스는 모든 윈도우와 컨트롤에서 공통으로 사용할 수 있습니다.- 리소스에는 스타일, 브러시, 데이터 템플릿, 문자열 등을 포함할 수 있으며, 애플리케이션 전반에 걸쳐 재사용할 수 있습니다.
- 예를 들어, 특정 색상이나 스타일을 정의하여 애플리케이션 전반에 일관된 디자인을 적용하고 싶을 때 유용합니다.
Namespace 와 URI
네임 스페이스는 실제 인터넷 주소URL가 아닌, 이름을 가진 주소로서 사용됩니다. XAML에서 사용되는 네임스페이스는 XML 언어와의 호환성을 위해 URI 형식으로 표기되지만, 이 URI는 물리적인 웹 주소나 리소스를 참조하는 것은 아닙니다.
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
이 네임스페이스 URI의 역할
- 이 URI들은 XML 스키마 표준을 따르기 위해 형식적으로 표기된 것입니다.
http://schemas.microsoft.com/winfx/2006/xaml/presentation
과 같은 네임스페이스 URI는 실제 웹 서버에 있는 리소스가 아니라, WPF가 사용할 XML 요소들을 그룹화하는 이름표 역할을 합니다.- 이러한 URI들은 WPF 런타임에서 해석되고, 해당 네임스페이스 내에 정의된 WPF 요소와 컨트롤들을 참조할 수 있게 해줍니다.
왜 URI 형식을 사용하는가?
- XML 스키마와 표준에서는 네임스페이스를 명확하게 구분하기 위해 URI 형식을 권장합니다.
- URI 형식을 사용하면 충돌을 방지할 수 있습니다. 예를 들어, 다른 라이브러리나 프레임워크에서도
Button
이라는 요소가 있을 수 있는데, 네임스페이스를 사용해 WPF의Button
과 구별할 수 있습니다. - URI 형식은 가독성을 높이고 표준화된 방법으로 네임스페이스를 표시할 수 있어, 개발자들에게 명확성을 제공합니다.
실제 코드와 연결되는 방식
- Visual Studio와 WPF 런타임은 URI가 지정된 네임스페이스를 만나면 해당 네임스페이스에 맞는 컨트롤, 레이아웃, 속성 등을 자동으로 참조합니다.
- 예를 들어,
http://schemas.microsoft.com/winfx/2006/xaml/presentation
는 WPF에서 제공하는 기본 UI 요소(버튼, 레이블 등)를 포함하는 네임스페이스입니다. 따라서 이 URI가 지정되면 XAML에서 WPF의 모든 UI 요소를 사용할 수 있게 됩니다.
MainWindow.xaml
기본 생성 코드
<Window x:Class="JustGo_WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:JustGo_WPF"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
<Window>
요소:
- 이 요소는 WPF의 창Window을 정의합니다. WPF 애플리케이션의 기본 UI 요소 중 하나로, 윈도우 창을 나타내며, 버튼이나 텍스트박스 등 UI 요소를 포함할 수 있습니다.
- 여기에서 설정된 속성들은 이 창의 클래스와 네임스페이스, 제목, 크기 등을 지정합니다.
x:Class="JustGo_WPF.MainWindow"
x:Class
는 XAML 파일과 연결된 코드비하인드 클래스를 지정합니다. 여기서는JustGo_WPF.MainWindow
클래스로 설정되어 있으며, 이 클래스는MainWindow.xaml.cs
파일에 정의됩니다.
xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- XAML 파일에서 기본적으로 사용되는 WPF 네임스페이스입니다.
- 이 네임스페이스는 WPF의 기본 컨트롤과 레이아웃 요소를 정의하고, 버튼, 그리드, 텍스트박스 등의 요소를 사용 가능하게 해줍니다.
xmlns:d=“http://schemas.microsoft.com/expression/blend/2008"
- 디자인 타임에서 사용되는 네임스페이스입니다. Blend for Visual Studio나 Visual Studio의 디자이너에서만 사용됩니다.
- 이 네임스페이스는 애플리케이션을 빌드하거나 실행할 때는 무시되며, 디자인 보기에서 미리 보기를 설정하는 데 사용됩니다.
xmlns:mc=“http://schemas.openxmlformats.org/markup-compatibility/2006"
- XAML 파일에서 호환성을 관리하기 위한 네임스페이스입니다.
- 여러 버전의 XAML이나 특정 기능을 다른 환경과 호환성 있게 작성하는 데 도움을 줍니다.
xmlns:local=“clr-namespace:JustGo_WPF”
local
이라는 이름의 네임스페이스를 현재 프로젝트의JustGo_WPF
네임스페이스와 연결합니다.- 이 네임스페이스를 통해 프로젝트 내에 정의된 클래스나 리소스를 XAML에서 직접 참조할 수 있습니다. 예를 들어, 사용자 정의 컨트롤이나 리소스가 여기에 포함됩니다.
mc:Ignorable=“d”
mc:Ignorable
은mc
네임스페이스에 있는 속성입니다.d
네임스페이스의 모든 요소와 속성을 무시하도록 설정합니다. 즉, 디자인 타임에만 사용되고 실행 시에는 무시되므로 애플리케이션 빌드와 성능에 영향을 주지 않습니다.
Title=“MainWindow”
- 창의 제목을 설정합니다. 이 제목은 창의 제목 표시줄에 표시됩니다.
- 예를 들어, “MainWindow"라는 제목은 창의 상단에 표시됩니다.
Height=“450”및
Width=“800”
- 창의 초기 높이와 너비를 설정합니다.
- 여기서는 창의 높이가 450, 너비가 800으로 설정되어 있습니다. 창 크기를 고정하거나 조정할 때 유용합니다.
<Grid>
요소
Grid
는 WPF의 레이아웃 컨테이너 중 하나로, 자식 요소들을 행과 열로 정렬할 수 있는 기능을 제공합니다.- 여기에서는 비어 있지만,
Grid
내에 버튼, 텍스트박스 등 UI 요소들을 추가할 수 있습니다.
기타
다른 x:
속성들
x:Key:
- 리소스 사전에서 리소스를 정의할 때 사용되는 키입니다. XAML에서 리소스를 참조할 때 이 키를 사용합니다.
<Application.Resources>
<SolidColorBrush x:Key="PrimaryColor" Color="Blue"/>
</Application.Resources>
x:Name:
- XAML에서 UI 요소에 이름을 부여할 때 사용됩니다. 코드비하인드에서 해당 요소에 접근할 수 있게 해줍니다.
<Button x:Name="MyButton" Content="Click Me"/>
x:Type:
- 리소스 사전에서 특정 타입의 리소스를 참조할 때 사용합니다.
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="LightBlue"/>
</Style>
x:Static:
- 정적 필드나 정적 속성의 값을 XAML에서 참조할 때 사용합니다.
<TextBlock Text="{x:Static system:DateTime.Now}"/>
x:Bind:
- XAML에서 데이터 바인딩을 설정할 때 사용됩니다.