Frage

Dies kann ein Kinderspiel für die WPF cognoscenti sein, aber ich würde gerne wissen, ob es eine einfache Möglichkeit ist Text auf dem WPF ProgressBar zu setzen. Für mich eine leere Fortschrittsbalken sieht nackt. Das ist Bildschirm Immobilien, die eine Nachricht über tragen konnte, was im Gange ist, oder auch nur fügen Sie Rufnummern in der Darstellung. Nun ist WPF alles über Container und Erweiterungen und ich Einwickeln langsam meine Gedanken um das, aber da ich nicht einen „Text“ oder „Inhalt“ Eigentum sehen, ich denke, ich werde etwas muss hinzufügen an den Behälter, die mein Fortschrittsbalken ist. Gibt es eine Technik oder zwei gibt, die sind natürlicher, als meine ursprünglichen WinForms Impulse sein? Was ist die beste, WPF-natürliche Art und Weise Text zu diesen Fortschrittsbalken hinzufügen?

War es hilfreich?

Lösung

Wenn Sie benötigen für das Hinzufügen von Text, eine wiederverwendbare Methode haben, können Sie einen neuen Style / Control schaffen, die einen zusätzlichen Textblock hat den Text anzuzeigen. Sie können die TextSearch.Text angefügten Eigenschaft kapern den Text auf einer Statusleiste zu setzen.

Wenn es nicht wiederverwendbar sein muss, setzen Sie einfach die Fortschrittsbalken in einem Gitter und einen Textblock mit dem Netz hinzuzufügen. Da WPF-Elemente zusammen komponieren kann, wird dies gut funktionieren.

Wenn Sie möchten, können Sie ein Benutzersteuerelement erstellen, die die ProgressBar und TextBlock- als öffentliche Eigenschaften aussetzt, so würde es weniger Arbeit als eine benutzerdefinierte Control zu schaffen.

Andere Tipps

Sowohl die früherer Antworten (eine neue CustomControl oder eine Adorner zu schaffen) sind bessere Verfahren, aber wenn man nur schnell will und schmutzig (oder zu verstehen, visuell wie es zu tun), dann würde dieser Code funktionieren:

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

Denken Sie daran, dass der Z-Index ist, so dass der letzte Punkt aufgelistet oben sein wird.

Auch wenn Sie nicht über Kaxaml noch, sollten Sie es abholen - es ist großartig zum spielen mit XAML, wenn Sie versuchen, Dinge herauszufinden.

Dies kann sehr einfach sein, (es sei denn es eine Menge von Möglichkeiten, bekommen diese sind zu arbeiten).

Sie könnten Style verwenden, um dies zu erledigen oder Sie überlagern nur TextBlock und ProgressBar.

ich dies persönlich benutzen den Prozentsatz des Fortschritts zu zeigen, wenn für die Fertigstellung warten.

  

zu halten, sehr einfach ich nur haben wollte ein Binding nur,   so angebracht ich die TextBock.Text zum ProgressBar.Value.

Dann einfach den Code kopieren, um es getan.

<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>

Hier ist, wie diese aussehen könnte:

eingeben Bild Beschreibung hier

Schauen Sie sich WPF Tutorial für den vollständigen Beitrag.

Sie könnten eine Adorner verwenden, um Text über die Oberseite der es angezeigt werden soll.

Siehe MSDN-Artikel auf Adorner

Sie würden eine Klasse erstellen, die von der Adorner Klasse übernimmt. Überschreiben Sie die OnRender Methode den Text zu zeichnen, die Sie wollen. Wenn Sie möchten, könnten Sie eine Abhängigkeitseigenschaft für die benutzerdefinierte Adorner erstellen, die den Text enthält, den Sie anzeigen möchten. Dann das Beispiel verwenden, in dem Link, den ich erwähnte diesen Adorner auf Ihre Statusleiste der adorner Schicht hinzuzufügen.

Rechtsklick ProgressBar und Vorlage bearbeiten klicken> Kopie bearbeiten.

Dann die TextBlock setzen, wie unten knapp über dem Schluss-Tag von Grid im Stil erzeugt durch VS gezeigt.

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

ProgressBar mit Text und Bindung von 2 Eigenschaften ( Wert / Maximalwert ):

<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:


Das gleiche, aber mit% des Fortschritts :

<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>

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top