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 |