티스토리 뷰

C#

8 WPF

김윤지. 2023. 4. 26. 23:40

WPF = Code(C#) + Markup(XAML)

디자인과 기능을 구분지었다

 

 

001_WPFBasic

Grid : 가장 많이 사용되는 컨테이너, 내부에 있는 UI 요소를 가득차게 표시

Column(열)과 Row(행)로 나누어 사용

 

Margin : 바깥 여백(좌 상 우 하)

Padding : 안쪽 여백

 

StackPanel : 컨트롤을 쌓아두는 레이아웃

Orientation 속성 : Vertical, Horizontal 지정

> 자식 요소들을 어떤 방향으로 배치할건지 지정 Vertical : 세로 배치, Horizontal : 가로 배치

 

x:Name = "" : 이름 지정

 

002_HelloWorld

<xaml 코드>

<Window x:Class="_002_HelloWorld.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:_002_HelloWorld"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="500">
    <Grid x:Name ="grid1" Background="Orange">
        <TextBlock HorizontalAlignment="Center"
                   VerticalAlignment="Center"
                   FontSize="70" MouseDown="TextBlock_MouseDown">Hello World!</TextBlock>
    </Grid>
</Window>

오렌지색 grid1이라는 이름을 가진 Grid에

Hello World 텍스트를 담은 TextBlock을 세로 중앙, 가로 중앙에 두고 폰트 크기 70 지정, MouseDown 이벤트

 

<C# 코드>

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 _002_HelloWorld
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show("TextBox Clicked", "String Msg");
            if(grid1.Background==Brushes.Orange)
                grid1.Background = Brushes.Aqua;
            else
                grid1.Background = Brushes.Orange;
        }
    }
}

이벤트가 발생하면 메시지 박스를 띄우고

만약 grid1의 배경색이 Orange라면 grid1의 배경색을 Aqua로 바꾸고

그렇지 않으면 grid1의 배경색을 Orange로 바꾼다

 

003_Grid

<xaml 코드>

<Window x:Class="_003_Grid.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:_003_Grid"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="400">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Button Grid.Row="0" Margin="10,10,10,5">Click Me 1</Button>
        <Button Grid.Row="1" Margin="10,5,10,5">Click Me 2</Button>
        <Button Grid.Row="2" Margin="10,5,10,10">Click Me 3</Button>
    </Grid>
</Window>

Grid를 3개의 행으로 나눈다

첫 번째 버튼이 첫 번째 행(Grid.Row="0")에,

두 번째 버튼이 두 번째 행(Grid.Row="1")에,

세 번째 버튼이 세 번째 행(Grid.Row="2")에 배치되어

각 버튼의 내용은 "Click Me 1", "Click Me 2", "Click Me 3"으로 설정했다

 

 

004_StackPanel(로그인창)

<xaml 코드>

<Window x:Class="_004_StackPanel.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:_004_StackPanel"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="400">
    <Grid Background="LightSteelBlue">
        <StackPanel Margin="50" Background="AliceBlue">
            <TextBlock HorizontalAlignment="Center"
                       FontSize="18"
                       FontWeight="Bold"
                       Padding="10"
                       Text="로그인"/>
            <!--아이디-->
            <StackPanel Orientation="Horizontal" Margin="20,10,20,10">
                <TextBlock Width="90"
                           FontSize="18">ID :</TextBlock>
                <TextBox x:Name="txtID" Width="150" FontSize="18"></TextBox>
            </StackPanel>

            <!--패스워드-->
            <StackPanel Orientation="Horizontal" Margin="20,10,20,10">
                <TextBlock Width="90"
                           FontSize="18">PW :</TextBlock>
                <PasswordBox x:Name="txtPW" Width="150" FontSize="18"></PasswordBox>
            </StackPanel>
            <!--로그인 버튼-->
            <StackPanel Orientation="Horizontal" Margin="20,10,20,10">
                <TextBlock Width="90"
                           FontSize="18"></TextBlock>
                <Button x:Name="btnLogin" Width="150" FontSize="18" Click="btnLogin_Click">LOGIN</Button>
            </StackPanel>
        </StackPanel>
    </Grid>
</Window>

Grid 안에 StackPanel 배치,

로그인 텍스트블록

아이디 입력 창 StackPanel 안에 텍스트블록, 텍스트박스를 가로로(Horizontal)배치 

패스워드 입력 창 StackPanel 안에 텍스트블록, 패스워드박스를 가로로(Horizontal)배치 

로그인 버튼 StackPanel 안에 빈칸 텍스트블록, 버튼을 가로로(Horizontal)배치

 

 

<C# 코드>

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 _004_StackPanel
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            if (txtID.Text == "abcd" && txtPW.Password == "1234")
                MessageBox.Show("로그인 성공");
            else
                MessageBox.Show("로그인 실패");
        }
    }
}

로그인 버튼이 클릭됐을 때

txtID의 text값이 abcd이고, pw가 1234와 일치하면 로그인 성공 메시지 박스 띄우기

아니라면 로그인 실패 메시지 박스 띄우기

'C#' 카테고리의 다른 글

10 WPF  (0) 2023.05.11
9 WPF  (0) 2023.04.27
7 TwoForms  (0) 2023.04.19
6 Firebase  (0) 2023.04.13
5 함수, 타이머  (0) 2023.04.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함