기본-생성-파일과-코드

기본-생성-파일과-코드

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:Classx 네임스페이스에서 제공하는 속성 중 하나로, 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:Ignorablemc 네임스페이스에 있는 속성입니다.
  • 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에서 데이터 바인딩을 설정할 때 사용됩니다.