2

RenderTargetBitmap を使用してテキスト ボックスをオフスクリーン バッファーにレンダリングしています。このテキスト ボックスにテキストを入力したいのですが、テキスト ボックスのフォーカスを設定できません (Focus() を使用しても効果がありません。おそらくキャンバスが実際のオブジェクトに接続されていないためです)。 1 キーボード入力がキャプチャされない 2. TextBox テキストと CaretIndex = index を使用してテキストを手動で設定しても、フォーカスがないためにキャレットが取得されません。どういうわけかこの焦点を合わせる方法はありますか?そうでない場合は、少なくともフォーカスがなくてもキャレットを表示したいのですが、これを行う方法がわかりません。

4

1 に答える 1

1

Windowsはキーボード入力をアクティブなウィンドウに直接配信するだけなので、これを機能させるには、実際のウィンドウでホストする必要があります。実際のウィンドウでホストされないようにする理由が明確になっていTextBoxないため、キーボード入力がどのようにキャプチャされるかを知るのは困難です。シナリオについて少し詳しく説明していただけますか?

コンテキストから、元のテキストボックスが表示されないようにすることがシナリオで重要であると推測する必要があります。テキストボックスをウィンドウに配置して、アクティブな状態を維持し、実際に表示されることなくすべての形式の入力を受信できるようにすることができます。これが1つの方法です:

<Grid>
    <Grid
        x:Name="container"
        HorizontalAlignment="Left" VerticalAlignment="Top"
        Margin="69,42,0,0"
        Opacity="0"
        >
        <TextBox
            Name="textBoxToRender"
            Height="23" Width="120"
            TextChanged="textBoxToRender_TextChanged"
            />
    </Grid>

</Grid>

ここでの要素自体は完全に普通ですが、0に設定して非表示にした要素のTextBox中に入れました。ヒットテストとキーボード入力の目的で、要素はまだ表示されていると見なされます。そして、私はそれ自体ではなく、を含むものに適用したので、あなたはそれを。で自由に使用することができます。コードビハインドのテキスト変更イベントハンドラーは次のとおりです。GridOpacityOpacityGridTextBoxRenderTargetBitmap

private void textBoxToRender_TextChanged(object sender, TextChangedEventArgs e)
{
    var rtb = new RenderTargetBitmap(
        (int) textBoxToRender.ActualWidth, (int) textBoxToRender.ActualHeight,
        96, 96, PixelFormats.Pbgra32);

    rtb.Render(textBoxToRender);

    rectangle1.Fill = new ImageBrush(rtb);
}

この最後の行は確認のためだけのものです。画像をブラシで使用して長方形をペイントし、見た目が正しいかどうかを確認しています。私のメインのXamlにもこれが含まれています:

<Rectangle Height="72" HorizontalAlignment="Left" Margin="74,167,0,0"
   Name="rectangle1" Stroke="Black" VerticalAlignment="Top" Width="255" />

私のcodebehindのコンストラクターには次のものが含まれています。

textBoxToRender.Focus();

入力を開始すると、テキストボックスの(サイズが一致しないために歪んでいる)ビットマップコピーが長方形に表示され、テキスト入力を使用してテキストボックスのビットマップコピーを取得できることを確認できます。フォーカス、カレット、そしてすべて。

テキストボックス自体は、非表示のままであるという意味で「画面外」のままです。

あなたが実際に何をしようとしているのかはっきりしないので、これが役に立ったかどうかはわかりませんが、お役に立てば幸いです。

于 2011-06-30T18:34:15.963 に答える