代码之家  ›  专栏  ›  技术社区  ›  user113476

.NET图形文本项

  •  0
  • user113476  · 技术社区  · 15 年前

    假设我正在显示一个位图,并希望允许将文本放置在该位图上。我可以在该位置显示richedit或textbox控件,并允许以特定的字体/大小键入文本等…但是,用户可以“看到”矩形文本输入控件在输入/编辑和编辑取消时出现和消失。它还包括输入/编辑文本时的位图。我的问题是,如何做到文本输入控件窗口“透明”或“不可见”。

    同样,如果位图上有文本,用户单击文本,中提琴插入符号出现在文本中, 不显示文本框、richedit等可见矩形控件… ,文本“神奇地”变成可编辑的。

    有没有办法在.net中实现这种“透明背景”文本输入?

    3 回复  |  直到 15 年前
        1
  •  0
  •   Jason Williams    15 年前

    我想到了几个选择:

    • 显示文本输入框并不是坏事。这让用户清楚地知道,点击位图后,他们进入了一个新的“模式”,现在可以输入文本。这与在树视图中编辑项目名或在windows文件资源管理器中编辑文件名是一致的。

    • 文本框支持borderstyle.none,但不允许透明背景(可能是因为在编辑操作期间必须保留背景)。试着看看它是否能满足你的需要是很容易的。

    • 将你想要的行为准确地写进你的显示器中是非常容易的,也就是说,完全不需要第三方的控制。您只需呈现文本,在编辑过程中添加插入符号显示(即在插入位置画一条简单的线),并在插入符号位置处理添加或删除文本的按键。您只需将文本和背景的呈现分离,以便在文本更改时重新呈现它。

        2
  •  0
  •   Ray Burns    15 年前

    简单的方法是使用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中呈现文本框后面的区域,请使用wpf elementhost使用wpf显示整个ui部分,并将其余代码保留为winforms。

    • 否则,编写自己的文本框替换控件可能是最好的选择。

        3
  •  0
  •   Igor Brejc    15 年前

    一种方法是通过继承 TextBox 然后重写 OnPaint 方法?我将使用.NET Reflector查看原始方法中的情况,并尝试找出如何在没有背景/帧的情况下呈现文本。