Version 3.2.0
Released Jul 3, 2026 - wpfHtmlEditor 3.2.0 fixes major WPF content/binding issues, safer paste/clipboard and Word import, spell-check crashes, table editing corruption, and file-save data loss risks.Bug fixes
- Binding DocumentHtml inside a WPF tab
- Cut/delete text from a table is not possible.
- Mouse flicker on long text with enabled spell checking
- MS Word paste corrupted markup: final cleanup destroyed non-empty style/class attributes and corrupted tag names
- Table Cell Properties crashed on a fractional percentage width/height (unguarded int.Parse)
- Table Properties crashed on tables whose cell rowspan exceeded the actual row count
- Mail-merge / paste insertion could silently replace the entire document body when pasteHTML failed
- Cut/Delete could silently delete unselected content (e.g. an adjacent image) next to the selection
- Polish (and other code-page) spell-check dictionaries failed to load on .NET 5+ (encoding provider unregistered)
- Table structural edits could corrupt a different or since-modified table via a stale cached TableMap
- Decimal CSS font sizes were misread on non-English locales (float.Parse without InvariantCulture)
- Design/HTML round-trip corrupted documents: empty non-void elements were emitted without a closing tag
- Formatter dropped whitespace-only text nodes, merging adjacent inline words together
- Licensing could crash or mis-license on non-Gregorian-calendar locales (culture-sensitive DateTime.Parse of the release date)
- MS Word paste merged all lists into one and turned numbered lists into bullets
- MS Word paste stripped IE conditional comments (regressed the ALM #492 fix)
- Pasting an image from MS Word deleted it (VML stripped before image conversion ran)
- Opening a legacy ANSI/windows-1252 HTML file corrupted its text on .NET 5+ (Encoding.Default is UTF-8)
- Zero-border table guideline pass could permanently freeze the UI thread (lock + AutoResetEvent + BackgroundWorker deadlock)
- Reading BodyHtml before the document existed entered an unbounded message-pump loop (hang)
- Saving to a file deleted the existing file before the new content was written (data loss on failure)
- Hyperlink dialog: after removing one link, later OK silently unlinked instead of inserting (stale cached-dialog state)
- Style Builder re-applied stale CSS or silently wiped styles (property dictionary never cleared between opens)
- Style Builder silently deleted CSS values its combo boxes could not represent (display:flex, position:fixed, width:auto, etc.)
- Caret index API injected permanent sentinel text into WPF documents and returned 0
- WPF: GetBodyHtml returned an empty string in ReadOnlyPreview mode (content lost when the host saved)
- WPF: setting DocumentHtml in ReadOnlyPreview mode was silently dropped
- WPF: Table/Cell Properties dialog crashed when the table used rgb()/rgba() CSS colors
- WPF: MS Word paste auto-detection and cleanup never ran (IsMsWordContentInClipboard hard-coded to false)
- WPF: disabling Options.FormatHtmlSource was silently ignored (a shadowing 'new' property)
- WPF: editors hosted without a Window (ElementHost) were never disposed; removed editors stayed rooted
- WPF: BodyHtml/DocumentTitle set before the document existed were dropped, then the empty value written back over the bound source
- WPF: toolbar dialogs leaked a window per open via the static LocalizationManager.LanguageChanged event
- Email image-embedding crashed on an img without src, a short/empty src, or a malformed base64 data URI
- Selection-sync markers could be left permanently inside the user's document on a failed mode switch
- Cleanup TD-wrapping regex corrupted nested tables by matching a span across tag boundaries
- Table row/column span arithmetic errors (inserted extra cells, mis-sized grid crash, wrong column position, null-cell insert)
- Inline spell-check node cache was mutated concurrently from the background scan and UI threads with no synchronization
- Interactive spell-check pre-scan ran a full synchronous O(N^2) document scan on the UI thread on tables
- A relative Hunspell affix (.aff) path was not rooted against the app base directory, breaking after a CWD change
- German/Norwegian/Polish embedded NetSpell dictionaries broke on .NET Framework: .aff/.dic parsed as hardcoded UTF-8, ignoring the SET directive
- .NET Framework NetSpell user dictionary ignored the configured file path (read/saved under %APPDATA%\NetSpell instead)
- Inline spell-check debounce timer could crash the process by BeginInvoke on a just-disposed control
- .NET Framework spell-check suggestion generation raced the background scan (Suggest iterated a list the worker thread cleared)
- Mail-merge InsertPlaceholder silently dropped the insert before the document was ready yet still fired PlaceholderInserted claiming success
- Mail-merge placeholder emitted an unconditional trailing that became permanent content and corrupted spacing in merged output
- Setting BaseUrl to null crashed the editor with a NullReferenceException on the timer path
- WPF: a family of content APIs (Get/SetBodyHtml, class name, body text, embed-images, etc.) silently no-op because the services used the WinForms-only browser.Document with no MSHTML fallback
- Paste deleted the current selection before checking there was anything to paste
- Set/get element-by-id APIs: NRE on null value, whole-document rewrite when the element is missing, and XPath breakage on IDs containing an apostrophe
- Print margins corrupted on non-English locales: culture-formatted decimals written into IE's margin registry values
- CanPaste threw when another process held the clipboard (unguarded Clipboard.ContainsImage)
- A UTF-8 clipboard probe overwrote the user's clipboard and lost all non-text formats during paste
- Parsing a style string with a duplicate CSS property name threw ArgumentException (duplicate declarations are legal CSS)
- Hyperlink/element HTML builders emitted attribute values without HTML encoding, corrupting markup when a value contained a quote
- Localization override JSON parser mangled escape sequences and mispaired keys for non-string values
- Turkish-I bug: list toggle/unlist broke on Turkish and Azerbaijani systems because tagName.ToLower() never matched "li"
- Insert Image dialog interpolated alt/title/src/class into the img tag with no HTML-attribute escaping - a double quote corrupted the document
- WPF trial-panel template part was not null-guarded: a custom ControlTemplate without spTrial crashed every instance, including licensed ones
- Editor teardown ran only on the first host window's Closed event - removed editors leaked native WebBrowser/mshtml resources and a re-parented editor was disposed while still in use
- Ctrl+Click hyperlink navigation worked only on the last anchor in the document (a single event-proxy field detached every previously attached anchor)
- ForceInlineSpellCheck threw NullReferenceException when called before the control template was applied
- Table Properties dialog crashed with UriFormatException on a relative background attribute
- Image dialog threw a raw unhandled exception when the imported file could not be verified on disk
- Style Builder Font tab injected 'color: #000000' into every style it edited, and the Background page crashed on function-form colors
- Case-sensitive string Replace defeated relative-path conversion, silently embedding machine-local absolute image paths
- WPFFolderBrowserDialog.Dispose() unconditionally threw, so any 'using' of this public IDisposable crashed
- ColorPicker ScA/ScR/ScG/ScB CLR properties were miswired and threw on any use
- Open toolbar button had no exception handling - an unreadable file crashed the host app
- Pasting an image with a non-writable local base-url folder crashed the host
- Search dialog handler unsubscribed from a freshly created dialog instance instead of the one that closed (leak / stale handler)
- Toolbar Search handler blanked PreloadedSearchText, killing the last-search-text pre-fill
- HtmlElementClickedEventArgs.EventData was never assigned - always null for subscribers
- Setting SpellCheckerOption.DictionaryFile = null threw NullReferenceException
- Designer property editor wiped DocumentHtml/BodyHtml to empty string when the edit dialog threw
- WPF debounced spell-check fire lacked the disposed guard the WinForms version has; a late fire hit a disposed spell-check service
- Replacing the public Options object at runtime silently broke option propagation and left a stale PropertyChanged subscription
- Typing into a misspelled (red-underlined) word lost the caret in WPF (WinForms saves/restores it)
- WPF preview mode always showed the raw IE context menu with no way to disable it (Options.DoNotShowContextMenuInPreviewMode existed only in WinForms)