Tengo un TextBlock
en WPF. Le escribo muchas líneas, superando con creces su altura vertical. Esperaba que una barra de desplazamiento vertical apareciera automáticamente cuando eso sucede, pero no fue así. Traté de buscar una propiedad de barra de desplazamiento en el panel Propiedades, pero no pude encontrar una.
¿Cómo puedo hacer que la barra de desplazamiento vertical se cree automáticamente para mi TextBlock
una vez que su contenido exceda su altura?
Aclaración: prefiero hacerlo desde el diseñador y no escribiendo directamente a XAML.
TextBlock
dos veces yTextBox
una vez.Respuestas:
Envuélvelo en un visor de desplazamiento:
NOTA: esta respuesta se aplica a un
TextBlock
(un elemento de texto de solo lectura) como se solicitó en la pregunta original.Si desea mostrar barras de desplazamiento en un
TextBox
(un elemento de texto editable), use lasScrollViewer
propiedades adjuntas:Los valores válidos para estas dos propiedades son
Disabled
,Auto
,Hidden
yVisible
.fuente
TextBlock
noTextBox
.puede usar lo siguiente ahora:
fuente
TextBlock
no acerca deTextBox
(como en el título y la línea de apertura), pero el segundo párrafo mencionadoTextBox
. Para ser claros, esta respuesta es definitivamente el mejor enfoque para los cuadros de texto , y el mío es el mejor que conozco para los bloques de texto :)Algo mejor sería:
Esto asegura que el texto en su bloque de texto no se desborde y se superponga a los elementos debajo del bloque de texto, como puede ser el caso si no utiliza la cuadrícula. Eso me sucedió cuando probé otras soluciones a pesar de que el bloque de texto ya estaba en una cuadrícula con otros elementos. Tenga en cuenta que el ancho del bloque de texto debe ser Automático y debe especificar el deseado en el elemento Cuadrícula. Hice esto en mi código y funciona muy bien. HTH
fuente
Esta es la forma de usar TextBox de desplazamiento en XAML y usarlo como un área de texto.
fuente
TextBlock
noTextBox
.Esta respuesta describe una solución usando MVVM.
Esta solución es excelente si desea agregar un cuadro de registro a una ventana, que se desplaza automáticamente hacia abajo cada vez que se agrega un nuevo mensaje de registro.
Una vez que se agregan estas propiedades adjuntas, se pueden reutilizar en cualquier lugar, por lo que se convierte en un software muy modular y reutilizable.
Agregue este XAML:
Agregue esta propiedad adjunta:
Y esta propiedad adjunta (para borrar el cuadro):
Luego, si está utilizando un marco de inyección de dependencias como MEF, puede colocar todo el código específico de registro en su propio ViewModel:
Así es como funciona:
fuente
Estoy haciendo esto de otra manera al poner MaxHeight en ScrollViewer.
Simplemente ajuste la altura máxima para mostrar más o menos líneas de texto. Fácil.
fuente
Puedes usar
Estos son propiedad adjunta de wpf. Para más información
http://wpfbugs.blogspot.in/2014/02/wpf-layout-controls-scrollviewer.html
fuente
Traté de hacer que estas sugerencias funcionen para un bloque de texto, pero no pude hacerlo funcionar. Incluso intenté que el diseñador lo hiciera funcionar. (Mire en Diseño y expanda la lista haciendo clic en la flecha hacia abajo "V" en la parte inferior) Intenté configurar el visor de desplazamiento en Visible y luego en Automático , pero aún así no funcionaría.
Finalmente me di por vencido y cambié
TextBlock
a aTextBox
con el conjunto de atributos Readonly , y funcionó de maravilla .fuente
No sé si alguien más tiene este problema, pero envolverme
TextBlock
en unaScrollViewer
interfaz de usuario de alguna manera estropeó mi interfaz de usuario; como una simple solución, descubrí que reemplazarloTextBlock
por unoTextBox
como estecrea un
TextBox
que se ve y se comporta como unTextBlock
con una barra de desplazamiento (y puede hacerlo todo en el diseñador).fuente
Esta es una solución simple a esa pregunta. El desplazamiento vertical se activará solo cuando el texto se desborde.
<TextBox Text="Try typing some text here " ScrollViewer.VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" />
fuente