web-dev-qa-db-ja.com

TextBoxキャレットスタイリング

WPF4でキャレットブラシを設定する際にいくつかのことを見つけましたが、実際にキャレット自体を変更した人はいますか?

私がやりたいのは、INSERTモードでOVERWRITEキャレットを使用することです。 。Netから3.5回ハック を見たことがありますが、パフォーマンスが低く、実際のカーソルの動きに欠けています...

キャレットにテンプレートがあれば素晴らしいと思います-それはWPFのアイデア全体と一致します...

何かアドバイス?

18

CaretElementは内部で封印されたクラスであり、たとえばデータテンプレートを使用してカスタマイズすることはできません。少なくとも、キャレットブラシは交換可能です。

<TextBox Text="This is some random text" CaretBrush="Blue" />

キャレットブラシに線形グラデーションが必要な場合は、これを行うことができます。

<TextBox Text="This is some random text" FontSize="20">
        <TextBox.CaretBrush>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                <LinearGradientBrush.GradientStops>
                    <GradientStop Color="Blue" Offset="0" />
                    <GradientStop Color="Red" Offset="1" />
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
        </TextBox.CaretBrush>

ビジュアルブラシも使ってみましたが、キャレットが常に小さな縦線で表示されています。

37
Tore Aurstad

フレームワークは背景色の逆を使用してキャレットの色を設定するため、Backgroundプロパティを{x:Null}に設定すると、デフォルトの黒いキャレットが作成されます。これは、黒い背景では特に可能です。見づらい!

http://www.codeproject.com/Articles/34736/Changing-the-Caret-Colour-in-WPF

この問題の簡単な解決策は、Backgroundプロパティの値を実際に指定することです。背景が黒でキャレットが白が必要な場合は、Backgroundプロパティの値を#00000000に設定できます。これは、完全に透明な黒です(意味がある場合)。フレームワークは色の不透明度コンポーネントを無視しているように見えるため、背景が透明になり、キャレットが白になります。

そしてもう1つのリンク: http://blogs.msdn.com/b/llobo/archive/2007/02/08/changing-caret-color-in-textbox.aspx

8
Ievgen Naida