Вам понадобится разместить эту вещь в реальном окне, чтобы это работало, потому что 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
здесь совершенно обычный, но я поместил его в Grid
, который я сделал невидимым, установив его Opacity
в 0.Для проверки попадания и ввода с клавиатуры он все еще считается видимым.И поскольку я применил Opacity
к содержащему Grid
, а не сам TextBox
, вы можете использовать его с RenderTargetBitmap
.Вот мой обработчик события изменения текста в codebehind:
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();
И когда я начинаю печатать, я вижу (искаженный, из-за несоответствующих размеров)растровая копия моего текстового поля отображается в прямоугольнике, подтверждая, что я могу получить растровую копию текстового поля с вводом текста, фокусом, кареткой и всем.
Само текстовое поле остается "за кадром »в том смысле, что он остается невидимым.
Поскольку мне неясно, что вы на самом деле пытаетесь сделать, я понятия не имею, помогает ли это вообще, но я надеюсь, что это полезно.