Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

New method to add token to RichSuggestBox

未關閉
#710 2 則留言 2 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
45/100
Issue 類型
功能
描述清晰度
基本清楚
活躍度
停滯
技術堆疊
csharp
領域
desktop

研究方向

從 RichSuggestBox 開始,追蹤現有的 AddTokens 路徑,包括文字選取範圍和 token 資料的更新方式。根據預期行為定義新方法的行為:它應在目前的選取位置插入一個帶有相關資料的顯示 token,並使產生的 token 可透過控制項現有的 token 狀態取得。

由索引模型根據 Issue 內容生成。

描述

components::controls::richsuggestbox enhancement feature request :mailbox_with_mail:
Describe the bug

As mentioned on Discord, I would really love a new method on RichSuggestBox that allows the programmatic insertion of a new token.

The use-case for this is something like a toolbar that offers ways to insert tokens. Currently you need to type the prefix, and then use the provided suggestions.

I think it is quite a common case that you want to offer suggestions outside of the provided popup. In the sample people get suggested to at-mention when the user types @. But imagine if I want to have a custom menu that enables the user to at-mention the last couple of people they interacted with. This new method would make that quite easy to implement.

Steps to reproduce

Currently I create the token in a manual way that relies a bit too much on the inner workings of RichSuggestBox:

    private void AddToken(string displayText, object? tokenData)
    {
        var guid = Guid.NewGuid();
        if (mySuggestBox.TextDocument is not null)
        {
            mySuggestBox.AddTokens([new(guid, $"({displayText})") { Item = tokenData }]);

            mySuggestBox.TextDocument.Selection.SetText(Microsoft.UI.Text.TextSetOptions.Unhide, $"\u200B({displayText})\u200B");
            mySuggestBox.TextDocument.Selection.Link = $"\"{guid}\"";
            // I move the focus, but probably not needed in the toolkit:
            mySuggestBox.Focus(FocusState.Programmatic);
            mySuggestBox.TextDocument.Selection.MoveStart(Microsoft.UI.Text.TextRangeUnit.Story, 1);
            // note: the new Token is not available in `Tokens` here yet, some processing occurs.
            // It seems like the private method `ValidateTokensInDocument()` should be called here.
        }
    }
Expected behavior

The new method should add a token, allow me to set the displayed text and the associated data. The token should be inserted at the current text selection/position (In my experience the current position is at the end of the document if the user hasn't interacted with the content)

Screenshots

See the discord for a video of my current use-case

Code Platform
  • UWP
  • WinAppSDK / WinUI 3
  • Web Assembly (WASM)
  • Android
  • iOS
  • MacOS
  • Linux / GTK
Windows Build Number
  • Windows 10 1809 (Build 17763)
  • Windows 10 1903 (Build 18362)
  • Windows 10 1909 (Build 18363)
  • Windows 10 2004 (Build 19041)
  • Windows 10 20H2 (Build 19042)
  • Windows 10 21H1 (Build 19043)
  • Windows 10 21H2 (Build 19044)
  • Windows 10 22H2 (Build 19045)
  • Windows 11 21H2 (Build 22000)
  • Other (specify)
Other Windows Build number

No response

App minimum and target SDK version
  • Windows 10, version 1809 (Build 17763)
  • Windows 10, version 1903 (Build 18362)
  • Windows 10, version 1909 (Build 18363)
  • Windows 10, version 2004 (Build 19041)
  • Windows 10, version 2104 (Build 20348)
  • Windows 11, version 22H2 (Build 22000)
  • Other (specify)
Other SDK version

No response

Visual Studio Version

2022

Visual Studio Build Number

latest (17.14.9)

Device form factor

Desktop

Additional context

I find the tokenized richtextbox a very cool and powerful control, the use-case in the samples centered on suggestions are just the tip of the ice berg.
I did not really look into this yet, but I believe a token must currently start with a punctuation character. But wouldn't it be neat if you could use an emoji? Imagine a paperclip with a document name to reference an attachment. 📎MyReport.pdf

Help us help you

No, I'm unable to contribute a solution.

主要語言
C#
星號
1.1k
分支
170
平均合併
6 天 5 小時
30 天內合併 PR
1

環境準備

在 Codespaces 中開啟

在瀏覽器裡用你自己的 GitHub 帳號啟動這個專案的開發容器。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

CommunityToolkit/Windows 的其他 Issue

查看 CommunityToolkit/Windows 的全部 Issue

相似的 Issue

更多 C# Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。