TextElement 콘텐츠 모델 개요
업데이트: 2007년 11월
이 콘텐츠 모델 개요에서는 TextElement에 대해 지원되는 콘텐츠를 설명합니다. Paragraph 클래스는 TextElement 형식입니다. 콘텐츠 모델은 다른 부분에 포함할 수 있는 개체/요소에 대해 설명합니다. 이 개요에서는 TextElement에서 파생된 개체에 대해 사용된 콘텐츠 모델을 요약하여 보여 줍니다. 자세한 내용은 유동 문서 개요를 참조하십시오.
이 항목에는 다음 단원이 포함되어 있습니다.
- 콘텐츠 모델 다이어그램
- 프로그래밍 방식으로 TextElement 콘텐츠 작업
- 이 콘텐츠 모델을 공유하는 형식
- TextElement 개체를 포함할 수 있는 형식
- 관련 항목
콘텐츠 모델 다이어그램
다음 다이어그램에서는 TextElement에서 파생된 클래스에 대한 콘텐츠 모델을 비롯하여 다른 비 TextElement 클래스가 이 모델에 맞추는 방법을 요약하여 보여 줍니다.
앞의 다이어그램에서 볼 수 있듯이 요소에 허용되는 자식은 클래스가 Block 클래스에서 파생된 것인지 아니면 Inline 클래스에서 파생된 것인지 여부에 따라서만 결정되는 것은 아닙니다. 예를 들어 Span(Inline 파생 클래스)은 Inline 자식 요소만 가질 수 있지만 Figure(Inline 파생 클래스)는 Block 자식 요소만 가질 수 있습니다. 따라서 다이어그램은 다른 요소에 포함할 수 있는 요소를 신속하게 확인하는 데 유용합니다. 예를 들어 RichTextBox의 유동 콘텐츠를 생성하는 방법을 확인하기 위해 다이어그램을 사용해 보겠습니다.
RichTextBox는 Block 파생 개체를 포함해야 하는 FlowDocument를 포함해야 합니다. 다음은 이전 다이어그램의 해당 세그먼트입니다.
따라서 지금까지의 태그는 다음과 같습니다.
<RichTextBox> <FlowDocument> <!-- One or more Block-derived object… --> </FlowDocument> </RichTextBox>
다이어그램에 따르면 Paragraph, Section, Table, List 및 BlockUIContainer를 비롯하여 선택할 여러 Block 요소가 있습니다(이전 다이어그램에서 Block 파생 클래스 참조). Table이 필요하다고 가정해 봅니다. 이전 다이어그램에 따르면 Table에는 TableRow 요소를 포함하는 TableRowGroup이 있으며 여기에는 Block 파생 개체를 포함하는 TableCell 요소가 포함됩니다. 다음은 이전 다이어그램에서 가져온 Table에 대한 해당 세그먼트입니다.
다음은 해당 태그입니다.
<RichTextBox> <FlowDocument> <Table> <TableRowGroup> <TableRow> <TableCell> <!-- One or more Block-derived object… --> </TableCell> </TableRow> </TableRowGroup> </Table> </FlowDocument> </RichTextBox>
이 경우에도 TableCell 아래에 하나 이상의 Block 요소가 필요합니다. 간단하게 약간의 텍스트를 셀 안에 배치해 보겠습니다. 이렇게 하려면 Run 요소와 함께 Paragraph를 사용하면 됩니다. 다음은 Paragraph가 Inline 요소를 사용할 수 있고 Run(Inline 요소)이 일반 텍스트만 사용할 수 있다는 것을 보여 주는 다이어그램의 해당 세그먼트입니다.
다음은 태그의 전체 예제입니다.
<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
<RichTextBox>
<FlowDocument>
<!-- Normally a table would have multiple rows and multiple
cells but this code is for demonstration purposes.-->
<Table>
<TableRowGroup>
<TableRow>
<TableCell>
<Paragraph>
<!-- The schema does not actually require
explicit use of the Run tag in markup. It
is only included here for clarity. -->
<Run>Paragraph in a Table Cell.</Run>
</Paragraph>
</TableCell>
</TableRow>
</TableRowGroup>
</Table>
</FlowDocument>
</RichTextBox>
</Page>
프로그래밍 방식으로 TextElement 콘텐츠 작업
TextElement의 콘텐츠는 컬렉션에 의해 구성되므로 이러한 컬렉션을 사용하여 TextElement 개체의 콘텐츠를 프로그래밍 방식으로 조작할 수 있습니다. TextElement 파생 클래스에 의해 사용되는 다양한 컬렉션은 다음 세 가지입니다.
InlineCollection: Inline 요소의 컬렉션을 나타냅니다. InlineCollection은 Paragraph, Span 및 TextBlock 요소의 사용할 수 있는 자식 콘텐츠를 정의합니다.
BlockCollection: Block 요소의 컬렉션을 나타냅니다. BlockCollection은 FlowDocument, Section, ListItem, TableCell, Floater 및 Figure 요소의 사용할 수 있는 자식 콘텐츠를 정의합니다.
ListItemCollection: 순서가 지정되거나 순서가 지정되지 않은 List의 특정 콘텐츠 항목을 나타내는 유동 콘텐츠 요소입니다.
이러한 컬렉션에서 Inlines, Blocks 및 ListItems의 각 속성을 사용하여 조작(항목 추가 또는 제거)할 수 있습니다. 다음 예제에서는 Inlines 속성을 사용하여 Span의 콘텐츠를 조작하는 방법을 보여 줍니다.
참고
테이블에서는 여러 컬렉션을 사용하여 해당 콘텐츠를 조작하지만 여기서는 다루지 않습니다. 자세한 내용은 표 개요를 참조하십시오.
다음 예제에서는 새 Span 개체를 만든 다음 Add 메서드를 사용하여 두 텍스트 런(Text Run)을 Span의 콘텐츠 자식으로 실행할 추가합니다.
Span spanx = new Span();
spanx.Inlines.Add(new Run("A bit of text content..."));
spanx.Inlines.Add(new Run("A bit more text content..."));
다음 예제에서는 새 Run 요소를 만들어 Span의 시작 부분에 삽입합니다.
Run runx = new Run("Text to insert...");
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx);
다음 예제에서는 Span에서 마지막 Inline 요소를 삭제합니다.
spanx.Inlines.Remove(spanx.Inlines.LastInline);
다음 예제에서는 Span에서 모든 콘텐츠(Inline 요소)를 지웁니다.
spanx.Inlines.Clear();
이 콘텐츠 모델을 공유하는 형식
다음 형식은 TextElement 클래스에서 상속되며 이 개요에서 설명한 콘텐츠를 표시하는 데 사용될 수 있습니다.
Bold, Figure, Floater, Hyperlink, InlineUIContainer, Italic, LineBreak, List, ListItem, Paragraph, Run, Section, Span, Table, Underline.
이 목록에는 Windows SDK와 함께 배포되는 비추상 형식만 포함됩니다. TextElement에서 상속되는 다른 형식을 사용할 수 있습니다.
TextElement 개체를 포함할 수 있는 형식
WPF 콘텐츠 모델을 참조하십시오.
참고 항목
작업
방법: Blocks 속성을 통한 FlowDocument 조작
방법: Blocks 속성을 통한 유동 콘텐츠 요소 조작