这可能是WPF认知的明智之举,但我想知道是否有一种简单的方法将文本放在WPF ProgressBar上。 对我来说,空的进度条看起来很赤裸。 这是屏幕房地产可能携带什么正在进行中,甚至只是添加数字来表示消息。 现在,WPF完全是关于容器和扩展的,我正在慢慢地围绕着它,但由于我没有看到“文本”或“内容”属性,我想我将不得不添加一些东西到我的进度条的容器。 是否有一种技术或两种技术比我原来的WinForms冲动更自然? 什么是最好的,最WPF自然的方式来添加文本到进度条?

===============>>#1 票数:60

之前的两个响应(创建一个新的CustomControlAdorner )都是更好的做法,但如果您只是想要快速和脏(或直观地了解如何操作),那么这段代码可以工作:

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

请记住,z-index是列出的最后一项将位于顶部。

此外,如果你还没有Kaxaml ,一定要把它拿起来 - 当你试图解决问题时,玩XAML非常棒。

===============>>#2 票数:29

这可以非常简单 (除非有很多方法可以实现这一点)。

您可以使用Style来完成此操作,或者只是覆盖TextBlockProgressBar

我个人使用它来显示等待完成时进度的百分比。

为了保持简单,我只想要一个 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>

这是这样的:

在此输入图像描述

查看完整帖子的WPF教程

===============>>#3 票数:29 已采纳

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

如果它不需要可重用,只需将进度条放在网格中并将TextBlock添加到网格中。 由于WPF可以将元素组合在一起,因此可以很好地工作。

如果需要,可以创建一个UserControl,将ProgressBar和TextBlock公开为公共属性,因此它比创建自定义ControlTemplate要少。

===============>>#4 票数:5

您可以使用Adorner在其上方显示文本。

请参阅有关Adorners的MSDN文章

您将创建一个继承自Adorner类的类。 重写OnRender方法以绘制所需的文本。 如果需要,可以为包含要显示的文本的自定义Adorner创建依赖项属性。 然后使用我提到的链接中的示例将此Adorner添加到进度条的adorner图层。

===============>>#5 票数:1

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

然后将TextBlock放在由VS生成的Style中Grid的结束标记上方,如下所示。

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

===============>>#6 票数:1

带有文本和绑定的ProgressBar来自2个属性( 值/最大值 ):

<Grid>
    <ProgressBar Name="pbUsrLvl"
                 Minimum="1" 
                 Maximum="99" 
                 Value="59" 
                 Margin="5"  
                 Height="24"  Foreground="#FF62FF7F"/>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock.Text>
            <MultiBinding StringFormat="{}UserLvl:{0}/{1}">
                <Binding Path="Value" ElementName="pbUsrLvl" />
                <Binding Path="Maximum" ElementName="pbUsrLvl" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</Grid>

Rezult:

在此输入图像描述


相同但有进展的百分比

<Grid>
    <ProgressBar Name="pbLifePassed"
                 Minimum="0" 
                 Value="59" 
                 Maximum="100"
                 Margin="5" Height="24" Foreground="#FF62FF7F"/>
    <TextBlock Text="{Binding ElementName=pbLifePassed, Path=Value, StringFormat={}{0:0}%}" 
           HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

在此输入图像描述

  ask by Jacob Proffitt translate from so

未解决问题?本站智能推荐:

2回复

如何引用WPF嵌套ListView中的控件?

我的XAML: 它从xml文件中填充得很好。 我有一张专辑,下面列出了每首曲目的曲目和进度条。 我现在循环使用XML来下载每个轨道。 我如何参考进度条? (进度条)lvAlbums [curAlbum] .lvTracks [curTrack] .spTrack [ “P
3回复

使用特定值动画ProgressBar内容WPF

我正在尝试开发一个ProgressBar ,它相应地填充我手动设置的值。 例如,我有这个ProgressBar : 我有一个按钮,每按一次就会增加10个单位的ProgressBar值,如下所示: 我希望每次点击它时都会对该值进行动画处理。 我试过这个: 但它从Prog
3回复

WPF ProgressBar不显示进度

WPF ProgressBar使我感到困惑。 这是我编写的用于显示它的代码: 据我所知,这足以使其正常工作。 但这在我的项目中不起作用。 我的意思是,当我显示窗口(实际上是弹出窗口的xbap项目)时,进度条不显示任何动画,但是可见。 尚无后台线程,UI线程未被阻止。 怎
2回复

WPF进度栏将无法正确对齐

我有以下XAML代码在我的窗口中显示一组控件: 它基本上是一个图像在左边,两个TextBlocks和一个ProgressBar在右边。 我的问题是,当我的窗口变宽时,最后的ProgressBar会无限扩展。 我希望进度条在某个时候停止增长。 因此,如果用户拉伸窗口,它将在给定的
1回复

在vb.net wpf应用程序中运行sub时刷新/更新文本字段和进度条

我有几个报告都将合并到同一个数据表中。 用户可以单击几个以运行,然后点击“查找记录”按钮以同时运行它们。 由于它们都需要很长时间,所以我想在状态栏上更新用户,因为每个存储过程都被成功调用。 但是,当我调用该过程时,我只会在最后列出一个更新内容。 我想做什么: 'Initialize
1回复

WPF中的进度条[关闭]

很难说出这里的要求。 这个问题是模棱两可的,模糊的,不完整的,过于广泛的或修辞性的,不能以目前的形式合理地回答。 如需帮助澄清此问题以便可以重新打开, 请访
4回复

将事件GotFocus分配给WPF-Aplication中的所有文本框

我想将GotFocus-Event添加到WPF应用程序中的每个文本框,因为它适用于触摸设备,并且每次使用TextBox时OSK都应打开。 我在将事件添加到文本框的过程中遇到问题。 Aplication已经为PC构建(我正处于交流之中,我的目标是将Apl。引入Windows 8 Touch D
2回复

如何在WPF中的控件上显示进度条

在WPF UserControl中,我必须调用WebService。 我在一个单独的线程上进行此调用,但我想通知用户该调用可能需要一些时间。 WebMethod返回一个对象集合,并将其绑定到我的UC中的ListBox。 到目前为止,这么好......这部分效果非常好。 但是, 我想在
2回复

WPF进度条中的错误颜色

编辑:我解决了我的问题...看看我的答案。 纠正如果是错的。 谢谢。 问题:出于某种原因,似乎WPF应用程序中的进度条没有显示我需要的颜色。 这是XAML代码: 这是结果: 对我来说看起来不像暗红色...碰巧每种颜色:( 有什么想法吗 ?
1回复

在WPF中创建测量条

我正在测量系统上,我需要以一种很好的图形方式向用户表示测量水平。 我在Photoshop中设计了一个测量栏,现在正尝试在WPF中实现它。 有谁知道如何最好地实施这种控制? 我虽然应该有一个最大值/最小值,并根据有界值通过使用变换来移动,这是比较容易的部分,但是实际图形在这里很棘手...