如何在TextBox中放置一个概述的textBlock(或任何其他控件)

时间:2016-03-31 12:11:39

标签: c# wpf textbox

我正在使用这个outlined textBlock,而Javier G.提出的解决方案就像一个魅力。我把它放在一个库中,所以现在是HelperLib:OutlinedTextBlock 现在我想将它放在TextBox中。

所以我尝试的是:

  • 将OutlinedTextBox作为TextBlock的子项,但由于它不接受它作为子项,因此无效。
  • 使用RichTextBox并将其放在FlowDocument中,但由于遇到运行时错误,出现了问题
    • 使用模板但又出现运行时错误。

如果放置outlineTextBox的事实使它太奇特了,我认为可以重新考虑将其他任何控件放在文本框中。

我认为解决方案很接近,但不知怎的,它仍然逃脱了我... - 编辑 - 还有一个我从未遇到过的问题: 我已经命名我的控件otbQuery但它没有显示在代码中!为什么???

UPDATE emp t
   SET ename = TRIM( TRAILING CHR(13)||CHR(10) FROM t.ename)

您可以在此处看到错误,并且未提出有效的快速修复

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要覆盖ControlTemplate控件的TextBox才能实现此目的。下面是一个如何执行此操作的简单示例,并且TextBox.Text属性仍绑定到Text的{​​{1}}属性。

TexBlock

如果我在 <TextBox> <TextBox.Template> <ControlTemplate> <Border BorderBrush="Black" BorderThickness="1"> <Grid> <TextBlock Margin="1" Foreground="Red" Text="{Binding Path=Content, ElementName=cp, Mode=OneWay}"/> <ContentPresenter x:Name="cp" Content="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" TextBlock.Foreground="Transparent"/> </Grid> </Border> </ControlTemplate> </TextBox.Template> </TextBox> 内放置了标准TextBlock,您可以自定义ControlTemplate控件。

修改

上述解决方案有效,但它是一个严重的问题。基本上,它会在TextBlock之上放置一个透明的ContentPresenterTextBlock以您希望的方式显示文字,TextBlock允许您输入ContentPresenter

仍然存在的一个问题是,点击或键入TextBox时光标栏不会显示。我怀疑可以通过对TextBox的模板进行更多样式来克服问题。