TextElement 콘텐츠 모델 개요
이 콘텐츠 모델 개요에서는 TextElement에 대해 지원되는 콘텐츠를 설명합니다. Paragraph 클래스 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 요소가 있습니다(이전 다이어그램의 블록 파생 클래스 참조). 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 요소가 필요합니다. 간단하게 셀 안에 텍스트를 배치해 보겠습니다. 이 작업은 Paragraph를 Run 요소와 함께 사용하여 수행합니다. 다음은 Paragraph가 Inline 요소를 사용할 수 있고 Run(Inline 요소)이 일반 텍스트만 사용할 수 있음을 보여주는 다이어그램의 해당하는 세그먼트입니다.
다음은 태그의 전체 예제입니다.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://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
메서드를 사용하여 두 개의 텍스트 실행을 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..."));
Dim spanx As 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);
Dim runx As New Run("Text to insert...")
spanx.Inlines.InsertBefore(spanx.Inlines.FirstInline, runx)
다음 예제에서는 Span에서 마지막 Inline 요소를 삭제합니다.
spanx.Inlines.Remove(spanx.Inlines.LastInline);
spanx.Inlines.Remove(spanx.Inlines.LastInline)
다음 예제에서는 Span에서 모든 콘텐츠(Inline 요소)를 지웁니다.
spanx.Inlines.Clear();
spanx.Inlines.Clear()
이 콘텐츠 모델을 공유하는 형식
다음 형식은 TextElement 클래스에서 상속되며 이 개요에서 설명한 콘텐츠를 표시하는 데 사용될 수 있습니다.
Bold, Figure, Floater, Hyperlink, InlineUIContainer, Italic, LineBreak, List, ListItem, Paragraph, Run, Section, Span, Table, Underline.
이 목록에는 Windows SDK를 통해 배포된 비추상 형식만 포함됩니다. TextElement에서 상속되는 다른 형식을 사용할 수 있습니다.
TextElement 개체를 포함할 수 있는 형식
WPF 콘텐츠 모델을 참조하세요.
참고 항목
.NET Desktop feedback