TextControlBox.WinUI.JuliusKirsch
1.5.0
dotnet add package TextControlBox.WinUI.JuliusKirsch --version 1.5.0
NuGet\Install-Package TextControlBox.WinUI.JuliusKirsch -Version 1.5.0
<PackageReference Include="TextControlBox.WinUI.JuliusKirsch" Version="1.5.0" />
<PackageVersion Include="TextControlBox.WinUI.JuliusKirsch" Version="1.5.0" />
<PackageReference Include="TextControlBox.WinUI.JuliusKirsch" />
paket add TextControlBox.WinUI.JuliusKirsch --version 1.5.0
#r "nuget: TextControlBox.WinUI.JuliusKirsch, 1.5.0"
#:package TextControlBox.WinUI.JuliusKirsch@1.5.0
#addin nuget:?package=TextControlBox.WinUI.JuliusKirsch&version=1.5.0
#tool nuget:?package=TextControlBox.WinUI.JuliusKirsch&version=1.5.0
<div align="center"> <img src="images/Icon1.png" height="150px" width="auto"> <h1>TextControlBox-WinUI</h1> </div>
<div align="center"> <img src="https://img.shields.io/github/issues/FrozenAssassine/TextControlBox-WinUI.svg?style=flat"> <img src="https://img.shields.io/github/stars/FrozenAssassine/TextControlBox-WinUI.svg?style=flat"> <img src="https://img.shields.io/github/repo-size/FrozenAssassine/TextControlBox-WinUI?style=flat">
</div>
<br/>
๐ค What is TextControlBox?
TextControlBox is a powerful and highly customizable textbox control for WinUI 3 applications. It provides an advanced text editing experience with features like syntax highlighting for multiple programming languages, intuitive search and replace functionality, zooming, line numbering, and smooth scrolling. With support for undo/redo, customizable themes, and efficient performance.
๐ ๏ธ Features
- Basic Text Editing: Cut, copy, paste, undo, redo, and full text selection capabilities.
- Navigation & Selection:
- Go to a specific line.
- Select specific lines or the entire text.
- Scrolling & Zooming:
- Scroll to specific lines or pages.
- Zoom in and out for better readability.
- Syntax Highlighting:
- Built-in support for multiple programming languages.
- Easily toggle syntax highlighting on and off.
- Search & Replace:
- Multi highlight search
- Find and replace text with options for case sensitivity and whole-word matching.
- Customization Options:
- Show or hide line numbers.
- Customize font, theme, and cursor appearance.
- Configure spaces vs. tabs for indentation.
- Other Features:
- Drag & drop text support.
- Surround selected text with custom characters.
- Get cursor position and manage selections programmatically.
Limits & Missing features
- No textwrapping (I have no idea how to implement this properly atm.)
- 200 million lines of text (20 characters per line) and it started to consume around 20GB of ram, scrolling worked, but random freezes appeared (too much overhead).
- Syntaxhighlighting for multi line comments or similar only works, if both start and end characters are in the visible view. (Due to performance I only do such actions on the visible rendered text)
โค๏ธ Support my work
๐๏ธ Getting Started
Installation
๐ฅ Download Nuget.org
Add TextControlBox to your WinUI 3 project and include the necessary namespace in your XAML or C# file.
using TextControlBoxNS;
Basic Usage
TextControlBox textBox = new TextControlBox();
textBox.LoadText("Hello, world!");
textBox.ShowLineNumbers = true;
textBox.EnableSyntaxHighlighting = true;
<details>
<summary><h2>๐ ๏ธ All properties and functions</h2></summary>
Text: Gets or sets the full content of the editor.SelectedText: Gets the currently selected text.CurrentSelection,CurrentSelectionOrdered: Provides selection metadata.HasSelection: Indicates if any text is currently selected.CursorPosition: Gets the current cursor position.CurrentLineIndex: Index of the line containing the cursor.NumberOfLines: Total number of lines in the editor.FontFamily: Gets or sets the font family.FontSize: Gets or sets the base font size.RenderedFontSize: Gets the final rendered font size.CornerRadius: Gets or sets the control's corner radius.RequestedTheme: Gets or sets the UI theme.Design: Gets or sets visual settings like line numbers and highlighting.ShowLineNumbers: Toggles line number visibility.ShowLineHighlighter: Toggles current line highlighting.EnableSyntaxHighlighting: Enables or disables syntax highlighting.SyntaxHighlighting: Gets or sets the current syntax highlighting language.LineEnding: Gets or sets the line ending mode.SpaceBetweenLineNumberAndText: Spacing between line numbers and text.ZoomFactor: Gets or sets the zoom factor.VerticalScroll,HorizontalScroll: Gets or sets scroll offsets.VerticalScrollSensitivity,HorizontalScrollSensitivity: Adjust scroll speed.UseSpacesInsteadTabs: Enables space-based tabulation.NumberOfSpacesForTab: Sets number of spaces per tab.SearchIsOpen: Indicates whether the search panel is open.Lines: Gets all lines as strings.DoAutoPairing: Enables auto-pairing of brackets/quotes.ControlW_SelectWord: Enables Ctrl+W to select the current word.CanDragDropText: Enables drag-and-drop support.ContextFlyout: Gets or sets the context menu flyout.ContextFlyoutDisabled: Disables the context menu.IsReadonly: Determines if the control is read-only.CursorSize: Gets or sets the cursor size.UndoRedoEnabled: Enables/disables undo/redo functionalityIsGroupingActions: Gets whether grouping of undo redo is enabled or disabledBeginActionGroup: Starts the grouping of undo redo itemsEndActionGroup: Ends the grouping of undo redo itemsSelectionScrollStartBorderDistance: Gets or sets the mouse distance from the text box edge that triggers auto-scroll during selectionShowWhitespaceCharacters: Gets or sets whether spaces and tabs are visually shown in the text box (e.g. as dots or arrows)Focus(FocusState state): Sets focus to the control.SelectLine(int line): Selects a specific line.SelectLines(int start, int count): Selects a range of lines.GoToLine(int line): Moves the cursor to a specific line.LoadText(string text): Loads text into the control.SetText(string text): Sets the text content.LoadLines(IEnumerable<string> lines, LineEnding lineEnding = LineEnding.CRLF): Loads multiple lines.Paste(): Pastes clipboard content.Copy(): Copies the selection to clipboard.Cut(): Cuts the selected text.GetText(): Returns the current content.SetSelection(int start, int length): Selects a specific text range.SelectAll(): Selects all text.ClearSelection(): Clears any text selection.Undo(): Undoes the last action.Redo(): Redoes the last undone action.ScrollLineToCenter(int line): Scrolls a line to center.ScrollOneLineUp(),ScrollOneLineDown(): Scrolls one line vertically.ScrollLineIntoView(int line): Brings a line into view.ScrollTopIntoView(),ScrollBottomIntoView(): Scrolls to top/bottom.ScrollPageUp(),ScrollPageDown(): Scrolls a full page.ScrollIntoViewHorizontally(): Scrolls horizontally into view.GetLineText(int line): Returns the text of a line.GetLinesText(int startLine, int length): Returns a range of lines.SetLineText(int line, string text): Replaces the text of a line.DeleteLine(int line): Deletes a specific line.AddLine(int line, string text): Adds a new line at a position.AddLines(int start, string[] lines): Adds the array of lines at the given position.SurroundSelectionWith(string text): Surrounds selection with a string.SurroundSelectionWith(string text1, string text2): Surrounds with prefix/suffix.DuplicateLine(int line): Duplicates the specified line.DuplicateCurrentLine(): Duplicates the current line.ReplaceAll(string word, string replaceWord, bool matchCase, bool wholeWord): Replaces all matches.ReplaceNext(string replaceWord): Replaces the next match.FindNext(),FindPrevious(): Navigates search results.BeginSearch(string word, bool wholeWord, bool matchCase): Starts a search.EndSearch(): Ends the search.Unload(): Unloads the control.ClearUndoRedoHistory(): Clears undo/redo history.GetCursorPosition(): Returns the cursor's screen position.SetCursorPosition(int lineNumber, int characterPos, bool scrollIntoView = true, bool autoClamp = true): Sets the cursor position.SelectSyntaxHighlightingById(SyntaxHighlightID languageId): Sets highlighting by ID.CalculateSelectionPosition(): Gets position info for selection.CharacterCount(): Returns character count.WordCount(): Returns word count.TextChanged: Event triggered when text changes.SelectionChanged: Event triggered on selection change.ZoomChanged: Event triggered when zoom changes.GotFocus,LostFocus,Loaded: Focus and lifecycle events.SyntaxHighlightings: Static dictionary of syntax languages.GetSyntaxHighlightingFromID(SyntaxHighlightID languageId): Gets highlighting language.GetSyntaxHighlightingFromJson(string json): Loads highlighting from JSON. </details>
๐ Events
TextControlBox provides several events to handle user interactions:
TextChanged: Triggered when the text content changes.SelectionChanged: Fires when the user changes the selected text.ZoomChanged: Called when the zoom factor is adjusted.GotFocus/LostFocus: Handle focus changes.TextLoadedEvent: Occurs when the TextControlBox finished loading the text.Loaded: Occurs when the TextControlBox finished loading and all components initialized
๐จ Syntax Highlighting
TextControlBox includes built-in support for multiple languages:
- C#, C++, Java, Python, JavaScript, JSON, HTML, CSS, SQL, Markdown, Batch, Config, CSV, LaTex, PHP, QSharp, TOML, XML, G-Code, Lua, Hex
Enable syntax highlighting:
textBox.SelectSyntaxHighlightingById(SyntaxHighlightID.CSharp);
๐จโ๐ฉโ๐งโ๐ฆ Contributing
Contributions are welcome! Feel free to submit a pull request or open an issue.
๐งพ License
This project is licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows10.0.19041 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
-
net8.0-windows10.0.19041
- Collections.Pooled (>= 1.0.82)
- Microsoft.Graphics.Win2D (>= 1.3.2)
- Microsoft.Windows.SDK.BuildTools (>= 10.0.26100.4948)
- Microsoft.WindowsAppSDK (>= 1.7.250606001)
- Newtonsoft.Json (>= 13.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on TextControlBox.WinUI.JuliusKirsch:
| Repository | Stars |
|---|---|
|
kyoyama-kazusa/Sudoku
A sudoku solver using brute forces and logical techniques.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.0 | 201 | 11/27/2025 |
| 1.4.0 | 203 | 11/6/2025 |
| 1.3.0 | 176 | 8/22/2025 |
| 1.2.0 | 174 | 8/21/2025 |
| 1.1.5 | 349 | 4/16/2025 |
| 1.1.4 | 245 | 3/17/2025 |
| 1.1.3 | 182 | 3/14/2025 |
| 1.1.2 | 242 | 3/11/2025 |
| 1.1.1 | 260 | 3/3/2025 |
| 1.1.0-alpha.3 | 117 | 2/28/2025 |
| 1.1.0-alpha.2 | 127 | 2/22/2025 |
| 1.1.0-alpha | 185 | 2/10/2025 |
| 1.0.0 | 406 | 8/1/2023 |
Added clickable links inside the text
Added x86Assembly language support
Added auto detection for tabs and spaces on LoadLines and LoadText
Added RewriteTabsSpaces function for changing the indentation of the text
Added LineEndingChanged and TabsSpacesChanged event
Changed NumberOfSpacesForTab and UseSpacesInsteadTabs to only change the behavior of the tab key and not the rendering of existing tabs in the text
Separated config file highlighting into ini, toml and klipper kind of styles
Rewrote markdown syntaxhighlighter completely
Fix a problem where dragging at the end of a line releasing the mouse and clicking somewhere else drawed a selection.
Small fixes in C# and C++ syntaxhighlighting