.net - usar - progressbar de visual basic
Texto en una barra de progreso en WPF (5)
Podría usar un Adorner para mostrar el texto encima de él.
Ver el artículo de MSDN sobre Adorners
Crearías una clase que hereda de la clase Adorner. Reemplace el método OnRender para dibujar el texto que desee. Si lo desea, puede crear una propiedad de dependencia para su Adorner personalizado que contenga el texto que desea mostrar. Luego, usa el ejemplo en el enlace que mencioné para agregar este Adorner a la capa adorner de tu barra de progreso.
Esto puede ser una obviedad para los conocedores de WPF, pero me gustaría saber si hay una manera simple de poner texto en la ProgressBar de WPF. Para mí, una barra de progreso vacía se ve desnuda. Esa es una pantalla de bienes raíces que podría llevar un mensaje sobre lo que está en progreso, o incluso simplemente agregar números a la representación. Ahora, WPF tiene que ver con contenedores y extensiones, y poco a poco estoy pensando en eso, pero como no veo una propiedad de "Texto" o "Contenido", creo que tendré que agregar algo al contenedor que es mi barra de progreso. ¿Hay alguna técnica que sea más natural que mis impulsos originales de WinForms? ¿Cuál es la mejor forma, la más natural de WPF para agregar texto a esa barra de progreso?
Si necesita un método reutilizable para agregar texto, puede crear un nuevo estilo / plantilla de control que tenga un bloque de texto adicional para mostrar el texto. Puede secuestrar la propiedad adjunta TextSearch.Text para establecer el texto en una barra de progreso.
Si no necesita ser reutilizable, simplemente coloque la barra de progreso en una cuadrícula y agregue un bloque de texto a la cuadrícula. Como WPF puede componer elementos juntos, esto funcionará muy bien.
Si lo desea, puede crear un UserControl que exponga ProgressBar y TextBlock como propiedades públicas, por lo que sería menos trabajo que crear un ControlTemplate personalizado.
Ambas respuestas anteriores (crear un nuevo CustomControl
o un Adorner
) son mejores prácticas, pero si lo que quieres es rápido y sucio (o para entender visualmente cómo hacerlo), entonces este código funcionaría:
<Grid Width="300" Height="50">
<ProgressBar Value="50" />
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
My Text
</TextBlock>
</Grid>
Solo tenga en cuenta que el índice z es tal que el último elemento enumerado estará en la parte superior.
Además, si todavía no tienes Kaxaml , asegúrate de recogerlo, es genial para jugar con XAML cuando tratas de resolver las cosas.
Haga clic con ProgressBar
botón derecho en ProgressBar
y haga clic en Editar plantilla> Editar una copia.
Luego coloque el TextBlock
como se muestra a continuación, justo encima de la etiqueta de cierre de Grid
en el Estilo generado por VS.
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
<TextBlock Background="Transparent" Text="work in progress" Foreground="Black" TextAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
Esto puede ser muy simple (a menos que haya muchas maneras de hacer que esto funcione).
Podría usar Style
para hacer esto o simplemente superponer un TextBlock
y una ProgressBar
.
Yo personalmente uso esto para mostrar el porcentaje del progreso cuando espero completarlo.
Para mantenerlo muy simple, solo quería tener un solo Binding
, así que TextBock.Text
al ProgressBar.Value
.
Luego solo copie el Código para hacerlo.
<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/>
Así es como podría verse esto:
Consulte el Tutorial de WPF para ver la publicación completa.
Saludos