Migrating Content: Word 2007 to XAML Code Tutorial

Written by

in

Migrating Content: Word 2007 to XAML Code Tutorial Migrating legacy documentation from Microsoft Word 2007 into Extensible Application Markup Language (XAML) is a common challenge when modernizing desktop applications. Whether you are building a WPF (Windows Presentation Foundation) or a WinUI application, converting rich text into clean XAML preserves layout structures while allowing dynamic UI rendering.

This tutorial provides a step-by-step guide to parsing, converting, and cleaning Word 2007 data for XAML-based environments. 1. Understand the Architecture

Word 2007 introduced the Office Open XML (.docx) format. A .docx file is a zipped archive containing XML files. The core text resides in word/document.xml.

XAML relies on a flow document model or text blocks to render rich content. Word 2007 Document Element Equivalent XAML Layout Element Document FlowDocument Paragraph () Paragraph Run () Run Table () Table Hyperlink () Hyperlink 2. Prepare the Migration Environment

You need a development environment capable of reading Open XML files. Visual Studio combined with the official .NET Open XML SDK is the standard choice. Step 1: Install the Open XML SDK

Open your Package Manager Console in Visual Studio and install the SDK: Install-Package DocumentFormat.OpenXml Use code with caution. Step 2: Set Up Namespace References Add these namespaces to your C# migration utility class:

using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using System.Windows.Documents; // Requires PresentationFramework Use code with caution. 3. Build the Conversion Engine

The migration strategy involves opening the Word document, iterating through its body elements, and mapping them to their XAML equivalents.

Here is the functional C# code to convert paragraphs and text runs:

public FlowDocument ConvertDocxToXaml(string docxPath) { FlowDocument xamlDoc = new FlowDocument(); using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(docxPath, false)) { var body = wordDoc.MainDocumentPart.Document.Body; foreach (var element in body.ChildElements) { if (element is Paragraph wordParagraph) { System.Windows.Documents.Paragraph xamlParagraph = new System.Windows.Documents.Paragraph(); // Map formatting and runs foreach (var run in wordParagraph.Elements()) { System.Windows.Documents.Run xamlRun = new System.Windows.Documents.Run(run.InnerText); // Check for bold formatting inherited from Word 2007 if (run.RunProperties?.Bold != null) { xamlRun.FontWeight = System.Windows.FontWeights.Bold; } // Check for italic formatting if (run.RunProperties?.Italic != null) { xamlRun.FontStyle = System.Windows.FontStyles.Italic; } xamlParagraph.Inlines.Add(xamlRun); } xamlDoc.Blocks.Add(xamlParagraph); } } } return xamlDoc; } Use code with caution. 4. Handle Complex Layout Elements

Word 2007 documents often contain complex elements like tables and lists that require explicit structural nesting in XAML. Converting Tables

Word 2007 tables () map directly to XAML Table elements, but you must construct rows and cells explicitly.

if (element is Table wordTable) { System.Windows.Documents.Table xamlTable = new System.Windows.Documents.Table(); TableRowGroup rowGroup = new TableRowGroup(); foreach (var row in wordTable.Elements()) { System.Windows.Documents.TableRow xamlRow = new System.Windows.Documents.TableRow(); foreach (var cell in row.Elements()) { System.Windows.Documents.TableCell xamlCell = new System.Windows.Documents.TableCell(); // Tables in XAML require block elements inside cells xamlCell.Blocks.Add(new System.Windows.Documents.Paragraph(new System.Windows.Documents.Run(cell.InnerText))); xamlRow.Cells.Add(xamlCell); } rowGroup.Rows.Add(xamlRow); } xamlTable.RowGroups.Add(rowGroup); xamlDoc.Blocks.Add(xamlTable); } Use code with caution.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *