Divis.DarkHtmlViewer 1.0.4

dotnet add package Divis.DarkHtmlViewer --version 1.0.4
NuGet\Install-Package Divis.DarkHtmlViewer -Version 1.0.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Divis.DarkHtmlViewer" Version="1.0.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Divis.DarkHtmlViewer --version 1.0.4
#r "nuget: Divis.DarkHtmlViewer, 1.0.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Divis.DarkHtmlViewer as a Cake Addin
#addin nuget:?package=Divis.DarkHtmlViewer&version=1.0.4

// Install Divis.DarkHtmlViewer as a Cake Tool
#tool nuget:?package=Divis.DarkHtmlViewer&version=1.0.4

Dark HTML Viewer

A WPF user control for displaying in memory HTML. The control stores the loaded HTML in temporary files and uses the WebView2 control to display them.





Add the namespace to your XAML


And use the HtmlViewer control

<dhv:HtmlViewer x:Name="htmlViewer" />

Commands & methods

LoadCommandvoid Load(string html)
ScrollCommandTask ScrollAsync(string elementId)
ScrollOnNextLoadCommandvoid ScrollOnNextLoad(string elementId)
SearchCommandTask SearchAsync(string text)
SearchOnNextLoadCommandvoid SearchOnNextLoad(string text)
PrintCommandTask PrintAsync()
ZoomCommandvoid Zoom(double zoom)

Loading HTML content

To load content into the viewer, bind an HTML string to it's HtmlContent property

<dhv:HtmlViewer x:Name="htmlViewer" HtmlContent="{Binding MyHtmlString}" />

or use the LoadCommand and pass the HTML string as the CommandParameter

    Command="{Binding ElementName=htmlViewer, Path=LoadCommand}"
    CommandParameter="{Binding MyHtmlString}"
    Content="Load HTML using a command" />

Whenever a link is clicked in the loaded HTML file, the control fires the LinkClickedCommand. Bind you own command to that in order to handle link clicks, example:


    LinkClickedCommand="{Binding MyLinkClickedCommand}" />


public ICommand MyLinkClickedCommand => new RelayCommand<string>(HandleLinkClick);

private void HandleLinkClick(string? link)
    Debug.WriteLine($"Link clicked: {link}");

Scroll to

To scroll to a specific element id, you have several options.

ScrollCommand: tries to scroll to a specific element in the currently loaded HTML file

    Command="{Binding ElementName=htmlViewer, Path=ScrollCommand}"
    Content="Scroll to elementId" />

ScrollOnNextLoadCommand: will try to scroll to a specific element in the next loaded HTML file

    Command="{Binding ElementName=htmlViewer, Path=ScrollOnNextLoadCommand}"
    Content="Scroll to elementId on next load" />

Save scroll position

Saves the current scroll position and tries to restore it next time HTML content is loaded. If ScrollOnNextLoad is used as well, this will be ignored

SaveScrollPositionForNextLoadCommand: will try to scroll to a specific element in the next loaded HTML file

    Command="{Binding ElementName=htmlViewer, Path=SaveScrollPositionForNextLoadCommand}"
    Content="Save scroll position for next load" />

SearchCommand: finds a search term on the current page

    Command="{Binding ElementName=htmlViewer, Path=SearchCommand}"
    CommandParameter="search text"
    Content="Search for text" />

SearchOnNextLoadCommand: finds a search term in the next loaded HTML file

    Command="{Binding ElementName=htmlViewer, Path=SearchOnNextLoadCommand}"
    CommandParameter="search text"
    Content="Search for text on next load" />


The PrintCommand can be used to bring up the default print dialog window.

    Command="{Binding ElementName=htmlViewer, Path=PrintCommand}"
    Content="Show print dialog" />


Enable logging for the control by configuring an ILoggerFactory provider like so:

var loggerFactory = LoggerFactory.Create(c =>

HtmlViewer.ConfigureLogger(() => loggerFactory);

Virtual host name to folder path mapping

See this page to learn more.

Enable virtual host name to folder path mapping like so:

HtmlViewer.ConfigureVirtualHostNameToFolderMappingSettings(new VirtualHostNameToFolderMappingSettings
    Hostname = "myfiles.local",
    FolderPath = @"C:\Resources\MyFiles",
    AccessKind = Microsoft.Web.WebView2.Core.CoreWebView2HostResourceAccessKind.Allow

You can then access your assets like this in HTML:

    <link href="https://myfiles.local/bootstrap.min.css" rel="stylesheet">

    <img src="https://myfiles.local/my_image.jpg" />

Default browser background color

Configure the default background color of the control like so:

using System.Drawing;

var backgroundColor = Color.FromArgb(255, 24, 24, 24);
Product Compatible and additional computed target framework versions.
.NET net6.0-windows7.0 is compatible.  net7.0-windows was computed.  net7.0-windows7.0 is compatible.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.4 732 2/20/2023
1.0.3 764 10/14/2022
1.0.2 764 10/14/2022
1.0.1 779 7/14/2022
1.0.0 765 7/13/2022
0.1.4-alpha 489 6/14/2022
0.1.3-alpha 499 2/24/2022
0.1.2-alpha 525 12/9/2021
0.1.1-alpha 537 5/12/2021