WPF中ProgressBar上的文本

这对于WPF cognoscenti来说可能是一件容易的事情,但是我想知道是否有简单的方法来将文本放在WPF ProgressBar上。 对我来说,一个空的进度条看起来是裸体的。 这是屏幕的房地产,可以传达关于正在进行的信息,甚至只是添加数字的表示。 现在,WPF是关于容器和扩展,我正在慢慢包装,但由于我没有看到“文本”或“内容”属性,我想我将不得不添加一些东西到容器是我的进度条。 是否有一种或两种技术比我原来的WinForms冲动更自然? 什么是最好的,最WPF自然的方式添加文本到进度栏?

如果您需要有可重复使用的方法来添加文本,您可以创build一个新的Style / ControlTemplate,它具有一个额外的TextBlock来显示文本。 您可以劫持TextSearch.Text附加属性以在进度条上设置文本。

如果不需要重复使用,只需将进度条放在网格中,然后在网格中添加一个TextBlock。 由于WPF可以组合元素在一起,这将很好地工作。

如果需要,可以创build一个UserControl,将ProgressBar和TextBlock公开为公共属性,所以比创build自定义ControlTemplate的工作量要less。

前面的两个反应(创build一个新的CustomControlAdorner )都是更好的做法,但是如果你只想快速和肮脏(或者直观地理解如何去做),那么这个代码就可以工作:

 <Grid Width="300" Height="50"> <ProgressBar Value="50" /> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"> My Text </TextBlock> </Grid> 

只要记住,z-index是最后列出的项目将是最重要的。

另外,如果你还没有Kaxaml ,一定要把它拿起来 – 当你试图弄清楚事情的时候,用XAML玩这个游戏是非常棒的。

这可以是非常简单的 (除非有很多方法来实现这个function)。

你可以使用Style来完成这个任务,或者你只是叠加一个TextBlock和一个ProgressBar

我亲自用这个来显示等待完成的进度百分比。

为了保持它非常简单,我只想要一个 Binding ,所以我将TextBock.Text附加到ProgressBar.Value

然后只需复制代码即可完成。

 <Grid> <ProgressBar Minimum="0" Maximum="100" Value="{Binding InsertBindingHere}" Name="pbStatus" /> <TextBlock Text="{Binding ElementName=pbStatus, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Center" /> <Grid/> 

这是如何看起来像这样的:

在这里输入图像说明

查看完整的post的WPF教程 。

问候

你可以使用Adorner来显示文本。

请参阅有关Adorners的MSDN文章

你将创build一个inheritance自Adorner类的类。 重写OnRender方法来绘制所需的文本。 如果您希望可以为包含要显示的文本的自定义Adorner创build依赖项属性。 然后使用我提到的链接中的示例将这个Adorner添加到进度条的装饰图层。

右键单击ProgressBar ,然后单击编辑模板>编辑副本。

然后将TextBlock放置在由VS生成的样式的Grid的结束标签的正上方。

  <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/> <TextBlock Background="Transparent" Text="work in progress" Foreground="Black" TextAlignment="Center"/> </Grid> <ControlTemplate.Triggers>