我正在使用这个outlined textBlock,而Javier G.提出的解决方案就像一个魅力。我把它放在一个库中,所以现在是HelperLib:OutlinedTextBlock 现在我想将它放在TextBox中。
所以我尝试的是:
如果放置outlineTextBox的事实使它太奇特了,我认为可以重新考虑将其他任何控件放在文本框中。
我认为解决方案很接近,但不知怎的,它仍然逃脱了我... - 编辑 - 还有一个我从未遇到过的问题: 我已经命名我的控件otbQuery但它没有显示在代码中!为什么???
UPDATE emp t
SET ename = TRIM( TRAILING CHR(13)||CHR(10) FROM t.ename)
您可以在此处看到错误,并且未提出有效的快速修复
答案 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
之上放置一个透明的ContentPresenter
。 TextBlock
以您希望的方式显示文字,TextBlock
允许您输入ContentPresenter
。
仍然存在的一个问题是,点击或键入TextBox
时光标栏不会显示。我怀疑可以通过对TextBox
的模板进行更多样式来克服问题。