2

Windows.UI.Xaml.Controls.TextBoxコントロール内の検索語に基づいて単語を強調表示する (選択しない) 方法を探しています。

テキストのレンダリング動作をオーバーライドする方法はないようですか? これはテキスト ボックス コントロールで実行できますか?

編集: 私はもともと RichEditBox を使用しようとしていましたが、防止しようとしていた書式設定されたテキストに貼り付けることができないという問題がありました (書式設定をクリアできる唯一のイベントは、少し遅れているように見える TextChanged です)。また、ハイライトのレンダリングをより細かく制御する必要があります

4

3 に答える 3

2

テキストボックスは、書式設定とテキスト選択に関して非常に制限されています。

TextBox ではなく RichTextBox コントロールを使用することをお勧めします。選択機能と書式設定機能が豊富で、複数の用語を簡単に強調表示できるからです。

クイック スタートは次のとおりです: http://www.devx.com/dotnet/Article/34644

于 2012-10-01T02:05:08.533 に答える
1

私は同じ問題を抱えています。しかし、あなたが知らなかった場合に備えて、とにかくこれを投稿します(完全な答えではありませんが、始めるきっかけになるかもしれません.)

次を使用して単語を強調表示できます。

int indexOfFoundKeyword = 1;
int lastIndexOfFoundKeyword = 12;
txtbox.SelectionStart = indexOfFoundKeyword;
txtbox.SelectionLength = lastIndexOfFoundKeyword;

これをボタン クリック イベント内に配置し、約 20 文字を入力してボタンをクリックすると、Metro テキスト ボックス内の単語を強調表示できることがわかります。私が抱えている問題は、見つかったキーワードの開始と終了を取得して、どの値を割り当てる必要があるかを知ることです。あなたの質問を正しく理解SelectionStartSelectionLengthていれば、そこにも行き詰まっていると思います。

アップデート

OK、これは少し一時的なものに思えますが、ほとんどの場合うまくいきます。(そしてそれが機能するときは正確です):

    // find the word 'jason'.
    string word = "jason";
    int a, b;
    a = genericBox.Text.IndexOf(word);
    b = word.Length;

    genericBox.SelectionStart = a;
    genericBox.SelectionLength = b;

テキストを見つけて選択するだけの場合は、それが可能であることが証明されます。これが最善の方法ではないことはわかっていますが、このようなものをメトロアプリのプレーンな TextBox で機能させることができた唯一の方法です。

于 2013-01-17T13:48:10.677 に答える
0

おそらく、TextBoxコントロールに基づいてコントロールを作成するか、カスタムコントロールを作成することができます。詳細については、ここここを参照してください。

于 2012-10-01T05:45:54.023 に答える