2011-06-27 9 views
2

RenderTargetBitmapを使用してテキストボックスをオフスクリーンバッファにレンダリングしていますが、このテキストボックスにテキストを入力したいのですが、Focus()を使用してテキストボックスフォーカスを設定できません - キャンバスが実際のウィンドウに貼られていないためでしょうか?)これには2つの結果があります:1キーボード入力がキャプチャされない2. TextBoxテキストを使用して手動でテキストを設定してもCaretIndex = indexフォーカスの欠如。この焦点をどうにかする方法はありますか?そうでない場合は、フォーカスがないのに少なくともキャレットが表示されるようにしたいが、これを行う方法が見えない。WPF texboxフォーカスをオフスクリーンバッファにレンダリングするとき

答えて

0

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

私は、元のテキストボックスが表示されていないことを確認することが重要であると推測しなければなりません。実際には、テキストボックスをアクティブなままにして、実際には表示されずにすべてのフォームを受け取ることができるように、ウィンドウにテキストボックスを配置することができます。ここでは一つの方法です:

<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> 

TextBox要素自体は、ここでは完全に普通のですが、私は私がヒットテストとキーボード入力のために0にそのOpacityを設定することで、目に見えない作りましたGridの内側にそれを入れています、それはまだ目に見えると考えられています。また、OpacityGridが含まれ、TextBoxではなく、RenderTargetBitmapと一緒に使用することができます。ここに私のテキスト変更イベントハンドラが分離コードである:

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" /> 

私の分離コードのコンストラクタは、この含まれています

textBoxToRender.Focus(); 

を私は入力を開始するとき、私は私の(不一致のサイズに起因し、歪ん)ビットマップのコピーを見ることができますテキストボックスが四角形に表示され、テキスト入力、フォーカス、キャレット、およびすべてを含むテキストボックスのビットマップコピーを取得できることが確認されます。

テキストボックス自体は、「見えない」という意味で「画面外」のままです。

あなたが実際にやろうとしていることはわからないので、これがまったく役に立っているのかどうかはわかりませんが、役に立つと思います。

関連する問題