首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >渲染到屏幕外缓冲区时WPF文本框焦点

渲染到屏幕外缓冲区时WPF文本框焦点
EN

Stack Overflow用户
提问于 2011-06-27 20:18:39
回答 1查看 490关注 0票数 2

我正在使用RenderTargetBitmap将一个文本框呈现到离屏缓冲区,并且我想在此文本框中输入文本,但是,我无法设置文本框焦点(使用Focus()没有任何效果-可能是因为画布没有附加到真正的窗口?)这有两个结果:1键盘输入不能被捕获2.即使我使用TextBox文本和CaretIndex =索引手动设置文本,我也不会得到插入符号,因为缺少焦点。有没有办法以某种方式让这种关注成为焦点?如果没有,我希望插入符号至少是可见的,即使没有焦点,但看不到这样做的方法。

EN

回答 1

Stack Overflow用户

发布于 2011-07-01 02:34:16

你需要把它托管在一个真实的窗口中才能正常工作,因为Windows只会将键盘输入直接传递到活动窗口。您还没有清楚地说明为什么不希望TextBox驻留在真实的窗口中,因此很难知道您期望如何捕获键盘输入--您能详细说明一下您的场景吗?

从上下文中我不得不猜测,在您的场景中,确保原始文本框不可见是很重要的。实际上,您可以将文本框放在窗口中,使其保持活动状态,并且能够接收所有形式的输入,而实际上并不是可见的。这里有一种方法:

代码语言:javascript
运行
复制
<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一起使用。下面是我在代码背后的文本更改事件处理程序:

代码语言:javascript
运行
复制
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还包含以下内容:

代码语言:javascript
运行
复制
<Rectangle Height="72" HorizontalAlignment="Left" Margin="74,167,0,0"
   Name="rectangle1" Stroke="Black" VerticalAlignment="Top" Width="255" />

我的codebehind的构造函数包含以下内容:

代码语言:javascript
运行
复制
textBoxToRender.Focus();

当我开始输入时,我可以在矩形中看到我的文本框的位图副本(由于大小不匹配而失真),验证我是否能够获得文本框的位图副本,其中包含文本输入、焦点、插入符号等等。

文本框本身保持“屏幕外”,因为它是不可见的。

因为我不清楚你到底想做什么,所以我不知道这是否有帮助,但我希望它是有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6492743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档