2008-09-16 50 views
45

這對WPF cognoscenti來說可能是一件容易的事,但我想知道是否有一種簡單的方法可以將文本放在WPF ProgressBar上。對我來說,一個空的進度條看起來是裸體的。這是屏幕的房地產,可以攜帶關於什麼正在進行的消息,或者甚至只是添加數字的表示。現在,WPF是關於容器和擴展的,我正在慢慢包裝,但由於我沒有看到「文本」或「內容」屬性,我想我將不得不添加一些東西到我的進度條容器。是否有一種或兩種技術比我原來的WinForms衝動更自然?什麼是最好的,最WPF的自然方式添加文本到進度條?WPF中的ProgressBar上的文本

+0

你可以去這個 - [WPF的進度條動態文本和文本顏色更新](http://stackoverflow.com/questions/5167867/wpf-progress-bar-with-dynamic-text-text -color-update) – Rohit 2011-03-06 04:05:36

回答

27

如果您需要添加可重複使用的方法來添加文本,您可以創建一個新的Style/ControlTemplate,它具有一個額外的TextBlock來顯示文本。您可以劫持TextSearch.Text附加屬性以在進度條上設置文本。

如果不需要重複使用,只需將進度條放入網格中並向網格中添加一個TextBlock即可。由於WPF可以將元素組合在一起,這將很好地工作。

如果需要,可以創建一個UserControl,將ProgressBar和TextBlock公開爲公共屬性,因此它比創建自定義ControlTemplate的工作量要少。

5

您可以使用Adorner在上面顯示文本。

MSDN article on Adorners

您將創建一個從裝飾器類繼承的類。重寫OnRender方法以繪製所需的文本。如果您希望可以爲包含要顯示的文本的自定義Adorner創建依賴項屬性。然後使用我提到的鏈接中的示例將此Adorner添加到進度條的裝飾圖層。

50

無論是在前響應(創建一個新CustomControlAdorner)是更好的做法,但如果你只是想快速和骯髒的(或在視覺上理解如何做到這一點),那麼這個代碼將工作:

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

請記住,z-index是最後列出的項目最多的。

另外,如果您還沒有Kaxaml,請務必選擇它 - 這對於您在嘗試解決問題時玩XAML非常有用。

+2

這是我最初設計的路線,但應該注意的是,在UI設置爲Windows Classic或XP的系統上,進度條會以深藍色顯示,這會使文本無法讀取。 – apc 2015-06-09 12:35:28

20

這可以是非常簡單的(除非有很多方法可以使它工作)。

您可以使用Style來完成此操作,或者您只覆蓋TextBlockProgressBar

我個人使用這個來顯示等待完成時的進度百分比。

爲了保持它很簡單,我只希望有一個Binding只, 所以我附TextBock.TextProgressBar.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/> 

                                                                                                這裏是如何,這可能是這樣的:

                                                                      enter image description here

退房WPF Tutorial爲完整的職位。

1

右鍵單擊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>