假设我正在显示一个位图,并希望允许将文本放在该位图上。我可以在该位置显示RichEdit或TextBox控件,并允许以特定字体/大小等方式输入文本...但是然后用户可以“看到”矩形文本输入控件出现并在输入/编辑时消失编辑取消。它还在输入/编辑文本时覆盖位图。我的问题是,如何这样做,使文本输入控制窗口“透明”或不“可见”。
同样,如果位图上有文字,则用户点击文本并在文本中显示插入符号,而不显示文本框,richedit等可见的矩形控件... ,只是“神奇地”的文字变得可编辑。
有没有办法在.NET中执行此“透明背景”文本输入?
答案 0 :(得分:0)
我想到了一些选择:
显示文本输入框可能不是一件坏事。这使得用户清楚地看到他们已经点击了位图,他们已经输入了新的“模式”并且现在能够输入文本。例如,这与在树视图中编辑项目名称或在Windows文件资源管理器中编辑文件名一致。
TextBox支持BorderStyle.None,但不允许透明背景(可能是因为它必须在编辑操作期间保留背景)。很容易尝试看看它是否能够满足您的需求。
将您想要的行为准确地写入显示器将非常容易 - 即完全省去第三方控件。您只需渲染文本,并在编辑过程中添加插入符号显示(即在插入位置绘制一条简单的线条),并处理按键以在插入符号位置添加或删除文本。您只需将文本和背景的渲染分开,以便在文本更改时重新渲染它。
答案 1 :(得分:0)
执行此操作的简单方法是使用WPF的TextBox控件。您可以轻松地将背景设置为透明:
<TextBox Text="{Binding MyProperty}" Background="Transparent" />
要使整个文本框的内容透明,只需使用ControlTemplate:
<TextBox Text="{Binding MyProperty}">
<TextBox.Template>
<ControlTemplate>
<ScrollViewer Name="PART_ContentHost" />
</ControlTemplate>
</TextBox.Template>
</TextBox>
如果您仍在使用WinForms,则要困难得多。您有三种选择:
听起来你正在做的应用程序类型已经是WPF的一个很好的选择,所以如果你不是太过分,我肯定会切换到WPF。除透明文本框外,WPF还有许多优于WinForms的优点,可以显着提高开发人员的工作效率,例如高级数据绑定和模板。
如果您坚持使用WinForms但可以在WPF中渲染TextBox后面的区域,请使用WPF ElementHost使用WPF显示UI的整个部分,并将其余代码保留为WinForms。
否则,您可以自行编写自己的TextBox替换控件。
答案 2 :(得分:0)
一种方法是通过继承TextBox
然后覆盖OnPaint
方法来创建新的用户控件?我会使用.NET Reflector来查看原始方法中发生了什么,并试图找出如何在没有背景/框架的情况下渲染文本。