HOW TO:取代 RichTextBox 的預設內容裝載
更新:2007 年 11 月
本範例顯示如何使用 Windows Presentation Foundation (WPF) 樣式取代 RichTextBox 的預設內容裝載。
「內容裝載」是轉譯 RichTextBox 內容的項目。RichTextBox 的預設控制項樣板會指定 ScrollViewer 做為內容裝載。
在不想要或不需要 ScrollViewer 所提供的捲動功能的情況下,輕量型的 AdornerDecorator 項目可以指定做為 RichTextBox 的內容裝載。ScrollViewer 和 AdornerDecorator 是內容裝載唯一支援的項目。
如需示範這個範例的運作範例,請參閱取代 RichTextBox 的預設內容裝載範例。
範例
RichTextBox 的 ControlTemplate 必須包含正好一個標記為內容裝載項目的項目。若要將項目標記為內容裝載,請指派特殊名稱 PART_ContentHost。內容裝載項目必須是 ScrollViewer 或 AdornerDecorator。內容裝載項目無法裝載任何子項目。
下列可延伸標記語言 (XAML) 範例定義的樣式會覆寫 RichTextBox 的預設控制項樣板。這個樣式與 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 範例定義的 RichTextBox 會利用先前宣告的樣式,方法是使用 Style 屬性再加上對樣式 x:Key 屬性的靜態資源參考。
<RichTextBox
Grid.Column="0"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
Style="{StaticResource TextBoxNoScrollViewer}"
>
<FlowDocument>
<Paragraph>
RichTextBox styled not to use a ScrollViewer as the content host.
</Paragraph>
</FlowDocument>
</RichTextBox>