-
-
Notifications
You must be signed in to change notification settings - Fork 141
Getting Started
This guide walks you through running the IDE and embedding the HexEditor control in your own project.
git clone https://github.com/abbaye/WpfHexEditorIDE.gitOpen WpfHexEditorControl.sln.
Right-click WpfHexEditor.App → Set as Startup Project.
Press F5. The IDE opens with the Welcome Panel.
flowchart LR
Clone["git clone"] --> Open["Open .sln\nVisual Studio 2022"]
Open --> Startup["Set WpfHexEditor.App\nas Startup Project"]
Startup --> Run["F5 → IDE launches"]
Run --> Welcome["Welcome Panel\nwith recent files and changelog"]
File → Open File (Ctrl+O) or drag any binary file onto the editor area.
The IDE auto-detects the format from 400+ .whfmt definitions and routes it to the best editor:
- Binary / unknown → Hex Editor
- JSON / XML / source code → Code Editor
-
.xamlfiles → XAML Visual Designer (split-pane: code + live canvas) - Image (PNG, BMP, JPEG…) → Image Viewer
- ZIP / archive → Structure Editor
File → Open Project / Solution supports:
-
.whsln/.whproj— native WpfHexEditor format -
.sln/.csproj— Visual Studio solutions (via SolutionLoader.VS) - Any folder → creates a
.whfoldermarker (open-folder mode)
The Solution Explorer populates with the project tree. You can also drag files directly onto the IDE.
File → New File → choose a template (Binary, TBL, JSON, XAML, Text).
┌────────────────────────────────────────────────────────────────┐
│ Menu bar │ Toolbar │ │ Status │
├────────────┴───────────┴───────────────────────────────┴───────┤
│ Solution │ │
│ Explorer │ Document / Editor Area │
│ (left) │ (tabs, floating windows) │
│ │ │
├────────────┤─────────────────────────────────────────────────────┤
│ Properties │ Terminal / Output / Error / Plugin panels │
│ (bottom) │ (bottom dock group) │
└────────────┴─────────────────────────────────────────────────────┘
All panels can be dragged, floated, auto-hidden, or tabbed anywhere in the layout.
| Shortcut | Action |
|---|---|
Ctrl+O |
Open file |
Ctrl+S |
Save active file |
Ctrl+Z / Ctrl+Y
|
Undo / Redo |
Ctrl+Shift+Z |
Redo (alternate) |
Ctrl+F |
Quick search bar (inline) |
Ctrl+Shift+F |
Advanced search dialog |
Ctrl+`` |
Toggle terminal |
F4 |
Toggle Properties panel |
Ctrl+Shift+P |
Plugin Manager |
Ctrl+Shift+B |
Build solution |
F7 |
Toggle Code/Design view (XAML Designer) |
Ctrl+1/2/3 |
XAML Designer zoom levels |
Ctrl+Shift+L |
Cycle XAML Designer layout modes |
Alt+Drag |
Rect selection (Code Editor / Text Editor) |
Ctrl+Click |
Go-to-definition (Code Editor) |
<ItemGroup>
<ProjectReference Include="..\WpfHexEditor.Core\WpfHexEditor.Core.csproj" />
<ProjectReference Include="..\WpfHexEditor.HexEditor\WpfHexEditor.HexEditor.csproj" />
</ItemGroup><Window xmlns:hex="clr-namespace:WpfHexEditor.HexEditor;assembly=WpfHexEditor.HexEditor">
<hex:HexEditor x:Name="HexEdit" FileName="data.bin" />
</Window>// Open file
HexEdit.FileName = @"C:\data\myfile.bin";
// Read a byte
byte value = HexEdit.GetByte(0x100);
// Modify a byte
HexEdit.ModifyByte(0xFF, 0x100);
// Save
HexEdit.Save();
// Undo
if (HexEdit.CanUndo) HexEdit.Undo();var progress = new Progress<double>(p => progressBar.Value = p);
await HexEdit.OpenAsync("large.bin", progress);dotnet new classlib -n MyPlugin -f net8.0-windows<ProjectReference Include="..\WpfHexEditor.SDK\WpfHexEditor.SDK.csproj" />using WpfHexEditor.SDK;
public class MyPlugin : IWpfHexEditorPluginV2
{
public string Id => "com.example.myplugin";
public string Name => "My Plugin";
public string Version => "1.0.0";
public string? Description => "My first plugin";
public int LoadPriority => 50;
private IIDEHostContext? _ctx;
public void Init(IIDEHostContext context)
{
_ctx = context;
context.UIRegistry.RegisterPanel("my-panel", "My Panel", () => new MyPanelView());
context.OutputService.WriteLine("My Plugin loaded.");
}
public void Activate() => _ctx?.UIRegistry.ShowDockablePanel("my-panel");
public void Deactivate() => _ctx?.UIRegistry.HideDockablePanel("my-panel");
public void Dispose() { }
}{
"id": "com.example.myplugin",
"name": "My Plugin",
"version": "1.0.0",
"entryPoint": "MyPlugin.dll",
"loadPriority": 50
}Copy the output folder to %AppData%\WpfHexEditor\Plugins\com.example.myplugin\ and restart the IDE.
👉 See Plugin System for full packaging with whxpack CLI.
Open the terminal (Ctrl+`` ) and try:
help # list all commands
list-files # list files in current directory
open-file C:\data\test.bin # open a file
search DE AD BE EF # search in active HexEditor
read-hex 0x0 16 # read 16 bytes at offset 0
plugin-list # list loaded plugins
status # IDE status summary
👉 See Terminal for the full command reference.
- Open a
.xamlfile — the IDE auto-routes to the XAML Designer - The split-pane shows: code editor (one side) + live canvas (other side)
- Edit code → canvas updates in real-time (150 ms debounce)
- Drag/resize elements on canvas → code updates automatically
- Toggle views: F7 (code only / split / design only)
- Change layout: Ctrl+Shift+L cycles through 4 split modes
- Undo/Redo:
Ctrl+Z/Ctrl+Y— up to 200 steps
- Architecture — understand how the IDE is built
- Plugin System — build and package plugins
- Terminal — commands, scripting, plugin API
- Plugin Monitoring — monitor plugin performance
- API Reference — complete HexEditor control API
- FAQ — common questions and troubleshooting
✨ Wpf HexEditor user control, by Derek Tremblay (derektremblay666@gmail.com) coded for your fun! 😊🤟
- API Reference
- Performance
- Services
- Core Components
- ByteProvider
- Rendering Engine
- Search Architecture
- WpfHexEditor.Shell (renamed from Docking.Wpf)
- Code Editor ~90% (NavBar, Inline Hints, Quick Info)
- XAML Visual Designer ~70%
- Shared UndoEngine (coalescing + transactions)
- VS
.sln/.csproj+ Open-Folder mode - Build System (IBuildAdapter + MSBuild plugin)
- Assembly Explorer + NuGet Solution Manager
- Synalysis Grammar Support (IGrammarProvider)