방법: TextBox의 기본 콘텐츠 호스트 바꾸기
업데이트: 2007년 11월
이 예제에서는 WPF(Windows Presentation Foundation) 스타일을 사용하여 TextBox의 기본 콘텐츠 호스트를 바꾸는 방법을 보여 줍니다.
콘텐츠 호스트는 TextBox의 콘텐츠를 렌더링하는 요소입니다. TextBox의 기본 컨트롤 템플릿에는 ScrollViewer가 콘텐츠 호스트로 지정되어 있습니다. TextBox의 기본 컨트롤 템플릿 예제를 보려면 TextBox ControlTemplate 예제를 참조하십시오.
ScrollViewer가 제공하는 스크롤 기능을 사용하지 않으려는 경우 또는 이 기능이 필요하지 않은 경우에는 이보다 간단한 AdornerDecorator 요소를 TextBox의 콘텐츠 호스트로 지정할 수 있습니다.
이 예제를 보여 주는 작업 샘플은 TextBox의 기본 콘텐츠 호스트 바꾸기 샘플을 참조하십시오.
예제
TextBox의 ControlTemplate에는 콘텐츠 호스트 요소로 태그가 지정된 요소가 정확히 하나 있어야 합니다. 요소에 콘텐츠 호스트로 태그를 지정하려면 특수한 이름인 PART_ContentHost를 할당합니다. 콘텐츠 호스트 요소는 ScrollViewer 또는 AdornerDecorator여야 합니다. 콘텐츠 호스트 요소가 자식 요소를 전혀 호스팅하지 않을 수도 있습니다.
다음 XAML(Extensible Application Markup Language) 예제에서는 TextBox의 기본 컨트롤 템플릿을 재정의하는 스타일을 정의합니다. 이 스타일은 TextBoxBase에서 상속된 요소와 호환됩니다. 이 예제에서는 AdornerDecorator가 콘텐츠 호스트로 지정되어 있습니다.
<Window.Resources>
<Style x:Key="TextBoxNoScrollViewer" TargetType="{x:Type TextBoxBase}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border
CornerRadius="2"
Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}"
>
<!--
The control template for a TextBox or RichTextBox must
include an element tagged as the content host. An element is
tagged as the content host element when it has the special name
PART_ContentHost. The content host element must be a ScrollViewer,
or an element that derives from Decorator.
-->
<AdornerDecorator
x:Name="PART_ContentHost"
Focusable="False"
/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
다음 XAML 예제에서는 스타일의 x:Key 특성에 대한 정적 리소스 참조와 함께 Style 특성을 통해 위에 선언된 스타일을 사용하는 TextBox를 정의합니다.
<TextBox
Grid.Column="0"
AcceptsReturn="True"
AcceptsTab="True"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
Style="{StaticResource TextBoxNoScrollViewer}"
>
TextBox styled not to use a ScrollViewer as the content host.
</TextBox>