If you’d like to render XML as a WPF FlowDocument, give this a try (ClickOnce sample; source available here or on CodePlex).  Here’s a screenshot:

image

The useful part is the PrettyXmlConverter class (view here; it’s "self documenting" :) ).  It’s implemented as an IValueConverter so you can easily include it in binding expressions:

<Window x:Class="XmlFlowDocumentSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:converters="clr-namespace:CJC.Wpf.Converters"
    Title="Pretty XML FlowDocument sample">

    <Window.Resources>
        <converters:PrettyXmlConverter x:Key="prettyXmlConverter"/>
        <XmlDataProvider x:Key="xmlSource" Source="Xml/Books.xml" IsAsynchronous="False"/>
    </Window.Resources>

    <Grid>

        <FlowDocumentReader ViewingMode="Scroll" Zoom="300"
                            Document="{Binding Source={StaticResource xmlSource}, Path=Document, BindsDirectlyToSource=true, Converter={StaticResource prettyXmlConverter}}">
        </FlowDocumentReader>

    </Grid>

</Window>

 

Currently it only renders elements and attributes, so no comments, processing instructions or explicit CDATA handling.  These could be added very easily if needed :)

The formatted XML pastes nicely into MS Word (formatting preserved).

DotNetKicks Image
About these ads