WPF中ProgressBar上的文本
这对于WPF的知识点可能是不费吹灰之力的,但是我想知道是否有一种简单的方法可以在WPF ProgressBar上放置文本。对我来说,一个空的进度条看起来是裸露的。这是屏幕空间,可以承载有关正在进行中的消息,甚至可以在表示中添加数字。现在,WPF就是关于容器和扩展的,我正在慢慢地解决这个问题,但是由于我没有看到" Text"或者" Content"属性,因此我想我必须添加一些内容到是我的进度条的容器。有没有比我最初的WinForms冲动更自然的一种或者两种技术?将文本添加到进度条的最佳,最WPF方式是什么?
解决方案
回答
如果需要添加文本的可重用方法,则可以创建一个新的Style / ControlTemplate,该模板具有一个额外的TextBlock来显示文本。我们可以劫持TextSearch.Text添加属性以在进度栏上设置文本。
如果不需要可重用,只需将进度条放在网格中,然后将TextBlock添加到网格中。由于WPF可以将元素组合在一起,因此可以很好地工作。
如果需要,可以创建一个将ControlBar和TextBlock公开为公共属性的UserControl,因此与创建自定义ControlTemplate相比,它的工作量较小。
回答
我们可以使用Adorner在其上方显示文本。
请参阅有关Adorners的MSDN文章
我们将创建一个从Adorner类继承的类。重写OnRender方法以绘制所需的文本。如果需要,可以为自定义Adorner创建一个依赖项属性,其中包含要显示的文本。然后,使用我提到的链接中的示例,将此Adorner添加到进度栏的装饰层。
回答
先前的两个响应(创建一个新的CustomControl或者一个Adorner)都是更好的做法,但是如果我们只是想快速又肮脏(或者想直观地了解如何做),则可以使用以下代码:
<Grid Width="300" Height="50"> <ProgressBar Value="50" /> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"> My Text </TextBlock> </Grid>
请记住,z-index使得最后列出的项目在最上面。
另外,如果我们还没有Kaxaml,请务必尝试使用它,这在尝试解决问题时非常适合使用XAML。