Eu tenho um TextBlock
no WPF. Escrevo muitas linhas, excedendo em muito sua altura vertical. Eu esperava que uma barra de rolagem vertical aparecesse automaticamente quando isso acontecesse, mas não apareceu. Tentei procurar uma propriedade da barra de rolagem no painel Propriedades, mas não consegui encontrar uma.
Como posso fazer a barra de rolagem vertical criada automaticamente para TextBlock
uma vez que seu conteúdo excede sua altura?
Esclarecimento: Prefiro fazê-lo do designer e não escrevendo diretamente no XAML.
TextBlock
duas eTextBox
uma vez.Respostas:
Embrulhe-o em um visualizador de rolagem:
NOTA: esta resposta se aplica a um
TextBlock
(um elemento de texto somente leitura), conforme solicitado na pergunta original.Se você deseja mostrar as barras de rolagem em um
TextBox
(um elemento de texto editável), use asScrollViewer
propriedades anexadas:Os valores válidos para estas duas propriedades são
Disabled
,Auto
,Hidden
eVisible
.fonte
TextBlock
nãoTextBox
.pode usar o seguinte agora:
fonte
TextBlock
não sendoTextBox
(como no título e na linha de abertura), mas no segundo parágrafo mencionadoTextBox
. Para ser claro, esta resposta é definitivamente a melhor abordagem para texto caixas , e meu é o melhor que eu conheço para texto blocos :)Algo melhor seria:
Isso garante que o texto no seu bloco de texto não ultrapasse e sobreponha os elementos abaixo do bloco de texto, como pode ser o caso se você não usar a grade. Isso aconteceu comigo quando tentei outras soluções, embora o bloco de texto já estivesse em uma grade com outros elementos. Lembre-se de que a largura do bloco de texto deve ser Automática e você deve especificar o desejado com no elemento Grade. Eu fiz isso no meu código e funciona lindamente. HTH.
fonte
Essa é a maneira de usar o TextBox de rolagem no XAML e usá-lo como uma área de texto.
fonte
TextBlock
nãoTextBox
.Esta resposta descreve uma solução usando MVVM.
Essa solução é ótima se você deseja adicionar uma caixa de log a uma janela, que rola automaticamente para o fundo toda vez que uma nova mensagem de log é adicionada.
Depois que essas propriedades anexadas são adicionadas, elas podem ser reutilizadas em qualquer lugar, resultando em software muito modular e reutilizável.
Adicione este XAML:
Adicione esta propriedade anexada:
E esta propriedade anexada (para limpar a caixa):
Então, se você estiver usando uma estrutura de injeção de dependência como o MEF, poderá colocar todo o código específico do log em seu próprio ViewModel:
Veja como funciona:
fonte
Estou fazendo isso de outra maneira, colocando MaxHeight no ScrollViewer.
Basta ajustar o MaxHeight para mostrar mais ou menos linhas de texto. Fácil.
fonte
Você pode usar
Essas são propriedades anexadas do wpf. Para maiores informações
http://wpfbugs.blogspot.in/2014/02/wpf-layout-controls-scrollviewer.html
fonte
Tentei fazer com que essas sugestões funcionassem para um bloco de texto, mas não consegui fazê-lo funcionar. Eu até tentei fazê-lo funcionar do designer. (Procure em Layout e expanda a lista clicando na seta para baixo "V" na parte inferior). Tentei definir o visualizador de rolagem como Visível e depois Automático , mas ainda assim não funcionaria.
Acabei desistindo e mudei
TextBlock
para paraTextBox
com o conjunto de atributos Readonly , e funcionou como um encanto.fonte
Não sei se alguém tem esse problema, mas envolvendo-o
TextBlock
em umaScrollViewer
interface do usuário de alguma maneira bagunçada - como uma solução alternativa simples, descobri que substituir oTextBlock
por umTextBox
como essecria um
TextBox
que se parece e se comporta como umTextBlock
com uma barra de rolagem (e você pode fazer tudo isso no designer).fonte
Esta é uma solução simples para essa pergunta. A rolagem vertical será ativada apenas quando o texto exceder o limite.
<TextBox Text="Try typing some text here " ScrollViewer.VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" />
fonte