본문 바로가기

WPF

[WPF] Control 과 ContentControl

 

Control: 이것은 모든 장난감의 기본이 되는 부품이에요. 예를 들어, 레고 블록처럼, 당신이 어떤 것을 만들기 위해 사용할 수 있는 기본 블록이죠. 하지만, 이 블록만으로는 아무것도 할 수 없어요. 우리가 만들고 싶은 것을 만들기 위해서는 더 많은 부품이 필요해요.

ContentControl: 이제, 우리가 레고 블록에 무언가를 추가할 수 있다고 생각해보세요. 예를 들어, 우리가 레고 집을 만들고 싶다면, 창문이나 문, 지붕 등을 추가할 수 있어요. ContentControl은 바로 그런 것입니다. 기본 블록(Control)에 무언가를 추가해서 더 재미있고 멋진 것을 만들 수 있게 해주는 장난감이죠.

 

이 둘의 차이를 간단히 말하자면, Control은 가장 기본이 되는 장난감이고, ContentControl은 그 기본 장난감에 무언가를 추가해서 더 멋진 것을 만들 수 있게 해주는 장난감이에요.

이제 조금 더 자세히 알아보겠습니다!

Control과 ContentControl은 UI(User Interface) 프로그래밍, 특히 .NET 프레임워크와 같은 환경에서 중요한 컴포넌트입니다.

Control: 이것은 모든 윈도우 프레임워크 컨트롤의 기본 클래스입니다. Button, TextBox, Label 등 모든 UI 요소는 Control 클래스로부터 파생됩니다. Control 클래스는 위치, 크기, 그리기, 이벤트 처리 같은 기본적인 UI 기능을 제공합니다. 하지만, 이 클래스 자체로는 내용을 가질 수 없습니다. 즉, Control은 UI 요소를 만들기 위한 기본 빌딩 블록 역할을 합니다.

ContentControl: ContentControl은 Control에서 파생된 클래스로, 단일 컨텐츠(자식 요소)를 호스팅할 수 있는 기능을 추가합니다. 예를 들어, Button이나 Label은 텍스트를 표시하는 컨텐츠를 가질 수 있습니다. ContentControl은 이런 식으로 다른 컨트롤이나 컨텐츠를 포함할 수 있는 더 복잡한 UI 요소를 만들기 위한 기반을 제공합니다. ContentControl을 사용하면, 컨트롤 내부에 다른 컨트롤, 이미지, 패널 등 다양한 요소를 넣어 복잡한 UI 구성요소를 만들 수 있습니다.

 

Control 예제: Button
Button은 가장 기본적인 Control 중 하나입니다. 여기서는 단순히 클릭 이벤트를 처리합니다. Button 자체는 ContentControl을 상속받지만, 이 예제에서는 그것이 Control로서 어떻게 동작하는지 보여줍니다.

using System.Windows; // WPF 네임스페이스 사용

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        
        // Button 생성
        Button simpleButton = new Button();
        simpleButton.Content = "Click Me"; // Button에 텍스트 설정
        simpleButton.Click += (sender, e) => // 클릭 이벤트 핸들러
        {
            MessageBox.Show("Button clicked!");
        };
        
        // MainWindow의 Content로 Button 설정
        this.Content = simpleButton;
    }
}

 

ContentControl 예제: Custom Content
ContentControl은 다양한 종류의 컨텐츠를 담을 수 있습니다. 이 예제에서는 ContentControl에 텍스트 뿐만 아니라 다른 UI 요소를 포함시킵니다.

using System.Windows; // WPF 네임스페이스 사용
using System.Windows.Controls; // Control 클래스 사용

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        
        // ContentControl 생성
        ContentControl customContentControl = new ContentControl();
        
        // StackPanel 생성 및 컨텐츠로 설정
        StackPanel panel = new StackPanel();
        panel.Children.Add(new TextBlock { Text = "Hello, World!" });
        panel.Children.Add(new Button { Content = "Click Me", Width = 100 });
        
        // ContentControl에 StackPanel 설정
        customContentControl.Content = panel;
        
        // MainWindow의 Content로 ContentControl 설정
        this.Content = customContentControl;
    }
}

 

위의 두 예제에서 볼 수 있듯이, Control 예제에서는 단순히 Button이라는 기본 컨트롤을 사용하여 사용자 인터페이스를 구성했습니다. 반면, ContentControl 예제에서는 ContentControl을 사용하여 텍스트와 버튼을 포함하는 StackPanel 같은 복잡한 컨텐츠를 컨트롤에 담았습니다. 이를 통해 ContentControl이 단순한 컨트롤보다 더 다양하고 복잡한 UI 구성을 가능하게 한다는 것을 알 수 있습니다.

'WPF' 카테고리의 다른 글

[WPF] DataContext 란  (0) 2024.04.23
[WPF] CustomControl 스타일 정의 코드 분석  (0) 2024.04.21
[WPF] DefaultStyleKeyProperty란  (0) 2024.04.19
[WPF] ControlTemplate과 ContentPresenter  (0) 2024.04.07