![]() |
VOOZH | about |
dotnet add package TextControlBox.WinUI.JuliusKirsch --version 1.6.2
NuGet\Install-Package TextControlBox.WinUI.JuliusKirsch -Version 1.6.2
<PackageReference Include="TextControlBox.WinUI.JuliusKirsch" Version="1.6.2" />
<PackageVersion Include="TextControlBox.WinUI.JuliusKirsch" Version="1.6.2" />Directory.Packages.props
<PackageReference Include="TextControlBox.WinUI.JuliusKirsch" />Project file
paket add TextControlBox.WinUI.JuliusKirsch --version 1.6.2
#r "nuget: TextControlBox.WinUI.JuliusKirsch, 1.6.2"
#:package TextControlBox.WinUI.JuliusKirsch@1.6.2
#addin nuget:?package=TextControlBox.WinUI.JuliusKirsch&version=1.6.2Install as a Cake Addin
#tool nuget:?package=TextControlBox.WinUI.JuliusKirsch&version=1.6.2Install as a Cake Tool
<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/>
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.
NuGet Package: TextControlBox.WinUI.JuliusKirsch
If you find TextControlBox useful and want to support its development:
| Scenario | ❌Common Pitfall | ✅Recommended Approach | Notes |
|---|---|---|---|
| Getting/Setting Text | textbox.Text = someText |
Use LoadText(string) or LoadLines(IEnumerable<string>) if you do not want to record an undo step |
Text and SetText always record an undo step. Load methods bypass undo history by design. |
| Character Count | textbox.Text.Length |
textbox.CharacterCount() |
Uses spans internally; avoids temporary string allocations. |
| Accessing Lines | textbox.Text.Split("\n") |
textbox.Lines or textbox.NumberOfLines |
Avoids creating temporary string arrays. Lines exposes the internal list efficiently. |
| Word Count | Manual splitting or regex on Text |
textbox.WordCount() |
Uses spans and char iteration for allocation-free counting. |
| Saving Text to File | File.WriteAllText("file.txt", textbox.GetText()) |
File.WriteAllLines("file.txt", textbox.Lines) |
Writes lines directly; avoids allocating a single large string on the heap. |
| Text Search | Manually iterating or substring search | Use BeginSearch(word, wholeWord, matchCase) + FindNext() / FindPrevious() + EndSearch() |
Provides fast, internal search with highlights and efficient indexing. |
| Iterating Lines | foreach(var line in textbox.Text.Split('\n')) |
foreach(var line in textbox.Lines) |
Iterates without extra string allocations. |
| Replacing Text | Using GetText() and manually replacing strings |
Use ReplaceNext(replaceWord) or ReplaceAll(word, replaceWord) |
Efficient, allocation-free replacements with undo handling options. |
Tips:
Text and SetText are convenient but always record an undo step; use LoadText / LoadLines to avoid this.CharacterCount(), WordCount(), Lines, and NumberOfLines for performance-sensitive operations.BeginSearch / FindNext / FindPrevious for searching instead of manual string operations.File.WriteAllLines(textbox.Lines) rather than GetText().Add TextControlBox to your WinUI 3 project and include the necessary namespace in your XAML or C# file.
using TextControlBoxNS;
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)ActualLineHeight: Returns the rendered height of a single line in pixelHighlightLineWhenNotFocused: Controls, whether the line is still highlighted when control is not focusedCanUndo: Gets whether undo could be executed.CanRedo: Gets whether redo could be executed.HighlightLinks: Gets or sets, whether links inside the text are highlighted and clickableFocus(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.RewriteTabsSpaces(int spaces, bool useSpacesInsteadTabs): Changes the current indentation of the text to a new indentation.DetectTabsSpaces(): Detects and returns the current indentation of the text as tuple
</details>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 initializedTabsSpacesChanged: Occurs when the tabs or spaces change, from LoadLines/LoadText or from propertiesLineEndingChanged: Occurs when the line ending changes, from LoadLines/LoadText or from propertyLinkClicked: Occures when a link inside the textbox was clicked (contains the url as parameter)TextControlBox includes built-in support for multiple languages:
Enable syntax highlighting:
textBox.SelectSyntaxHighlightingById(SyntaxHighlightID.CSharp);
Contributions are welcome! Feel free to submit a pull request or open an issue.
This project is licensed under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0-windows10.0.19041 net9.0-windows10.0.19041 is compatible. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
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.6.2 | 460 | 2/2/2026 |
| 1.6.1 | 220 | 1/23/2026 |
| 1.6.0 | 248 | 1/8/2026 |
| 1.5.1 | 355 | 12/15/2025 |
| 1.5.0 | 397 | 11/27/2025 |
| 1.4.0 | 334 | 11/6/2025 |
| 1.3.0 | 278 | 8/22/2025 |
| 1.2.0 | 242 | 8/21/2025 |
| 1.1.5 | 452 | 4/16/2025 |
| 1.1.4 | 315 | 3/17/2025 |
| 1.1.3 | 251 | 3/14/2025 |
| 1.1.2 | 306 | 3/11/2025 |
| 1.1.1 | 330 | 3/3/2025 |
| 1.1.0-alpha.3 | 164 | 2/28/2025 |
| 1.1.0-alpha.2 | 177 | 2/22/2025 |
| 1.1.0-alpha | 234 | 2/10/2025 |
| 1.0.0 | 461 | 8/1/2023 |
Fixed index out of range exception when clicking outside the linenumbers
Fixed sometimes occuring divided by zero exception when reformatting tabs and spaces
Fixed focus issues when clicking outside the textbox
Fixed key pressed like up and down arrow are send to parent controls as well