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一个新的CustomControl
或Adorner
)都是更好的做法,但是如果你只想快速和肮脏(或者直观地理解如何去做),那么这个代码就可以工作:
<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>