WPF Control | Button | Template | 이미지 버튼

title-gonggo.png

WPF Control | Button | Template | 이미지 버튼

WPF Button Template 이해하기


지난 포스팅에서 Button에 대해서 이야기를 했었고 마지막에 테두리가 둥근버튼을 만드는 예제가 있었습니다. 해당 예제에서는 Template을 이용해서 테두리를 설정했었는데요. 이 설정하는 방법에 대해서 자세하게 이야기해보도록 하겠습니다.

https://tip1234.tistory.com/216

 

지난 코드를 보겠습니다.

               <Button Content="Btn1" Width="60" Height="30">
                <Button.Template>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border CornerRadius="10" Background="White">
                            <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}"/>
                        </Border>
                    </ControlTemplate>
                </Button.Template>
            </Button>
   

Button에 Template을 생성하는 것은 기존의 버튼이 아닌 새롭게 정의된 버튼을 사용하기 위한 키워드입니다. 기본적으로 버튼에는 Content가 있어서 거기에 글자를 쓰는데요. 글자가 아닌 다른 이미지를 넣거나 이미지 + 글자를 넣기 위해서는 Template를 정의해야합니다. 

그 사이에 ControlTemplate 으로 새롭게 Control을 만드는 빈껍데기를 만들어줍니다. 이때 TargetType을 지정하는데요. 자신이 원하는 기능을 가진 컨트롤을 Type으로 설정하게 됩니다. 

그리고 <ControlTemplate>          </ControlTemplate> 사이에 원하는 컨트롤을 넣으면 됩니다. 

현재 코드에서는 Border를 넣고, 그 안에 ContentPresenter를 넣었습니다. ContentPresenter에 아무런 설정을 하지않으면 TargetType에서 설정한 컨트롤로 설정이 됩니다. 

그렇다면 이를 활용해서 이미지 버튼을 만들어보겠습니다. 

               <Button Content="Btn1" Width="60" Height="30">
                <Button.Template>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border Background="White">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition/>
                                    <ColumnDefinition/>
                                </Grid.ColumnDefinitions>
                                <Image Grid.Column="0" Source="pack://,,,/Resources/images (4).png"/>
                                <ContentPresenter Grid.Column="1" ContentTemplate="{TemplateBinding ContentTemplate}"/>
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Button.Template>
            
   

이번엔 Border 사이에 Grid 라는게 들어갔습니다. 결과부터 보면

 

img.png

 

이런 버튼이 만들어졌습니다. 왼쪽에 C# 이라는 이미지가 들어갔고, 버튼 글자로 Btn1 이라는 글자가 들어갔습니다. Grid로 내부를 2개로 나누고 왼쪽에 Image 컨트롤을 넣고, 오른쪽에 ContentPresenter를 넣으면 이미지 버튼이 만들어집니다. 

이런식으로 다양한 컨트롤을 버튼의 Template에 새롭게 추가할 수 있습니다. 그렇기 때문에 WPF가 Winform보다 쉽게 다양한 컨트롤을 만들 수 있게 되는 것이죠.

여기서 이미지를 추가하는 방법으로 여러가지 방법이 있지만, 저는 프로젝트의 리소스를 이용해서 추가했습니다. 

 

img.png

 

솔루션 탐색기에서 자신의 프로젝트를 마우스 오른쪽을 누르고 속성을 클릭합니다. 제 경우 WpfApp2가 프로젝트입니다. 

 

img.png

 

속성을 누르면 이런 창이 나오는데요. 여기서 리소스를 누르고, 리소스 추가 => 기존파일추가를 선택합니다.

그리고 자신이 사용할 이미지를 추가하면 됩니다. 

 

img.png

 

그렇게 되면 Resources 라는 폴더가 생기게 됩니다. 

 

img.png

 

그러면 추가한 이미지가 생기게 됩니다. 여기서 한가지 설정을 할 것이 있는데요. 

 

img.png

 

해당 이미지를 누르고 속성에서

빌드 작업을 Resource로 바꿔주시고, 

출력 디렉터리에 복사를 항상 복사로 바꾸면 됩니다. 

프로젝트가 빌드하면서 필요한 리소스를 함께 복사하기 때문입니다. 

물론 다른 방법으로도 이미지를 추가할 수 있습니다. 제가 소개한 방법은 아주 간단한 방법이고, 쉽게 할 수 있는 방법입니다. 

0 Comments

상담신청하기

메일문의하기

CS Center


000.0000.0000
월-금 : 9:30 ~ 17:30
토/일/공휴일 휴무
런치타임 : 12:30 ~ 13:30
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand