Ich habe eine TextBlock
in WPF. Ich schreibe viele Zeilen darauf, die seine vertikale Höhe weit überschreiten. Ich habe erwartet, dass in diesem Fall automatisch eine vertikale Bildlaufleiste angezeigt wird, dies ist jedoch nicht der Fall. Ich habe versucht, im Eigenschaftenbereich nach einer Bildlaufleisteneigenschaft zu suchen, konnte jedoch keine finden.
Wie kann ich eine vertikale Bildlaufleiste erstellen, die automatisch für meine erstellt wird, TextBlock
sobald der Inhalt die Höhe überschreitet?
Klarstellung: Ich würde es lieber vom Designer machen und nicht direkt an die XAML schreiben.
TextBlock
zweimal undTextBox
einmal erwähnen .Antworten:
Wickeln Sie es in einen Scroll-Viewer:
HINWEIS Diese Antwort gilt für ein
TextBlock
(schreibgeschütztes Textelement), wie in der ursprünglichen Frage gefordert.Wenn Sie Bildlaufleisten in einem
TextBox
(bearbeitbaren Textelement) anzeigen möchten, verwenden Sie dieScrollViewer
angehängten Eigenschaften:Gültige Werte für diese beiden Eigenschaften sind
Disabled
,Auto
,Hidden
undVisible
.quelle
TextBlock
nichtTextBox
.kann jetzt Folgendes verwenden:
quelle
TextBlock
nichtTextBox
(wie im Titel und in der Eröffnungszeile), sondern im zweiten Absatz erwähnt wirdTextBox
. Um klar zu sein, ist diese Antwort auf jeden Fall der beste Ansatz für die Textbox , und ich ist das Beste , was ich kenne für Textblocks :)Etwas besseres wäre:
Dadurch wird sichergestellt, dass der Text in Ihrem Textblock nicht überläuft und die Elemente unter dem Textblock überlappt, wie dies der Fall sein kann, wenn Sie das Raster nicht verwenden. Das ist mir passiert, als ich andere Lösungen ausprobiert habe, obwohl sich der Textblock bereits in einem Raster mit anderen Elementen befand. Beachten Sie, dass die Breite des Textblocks Auto sein sollte und Sie das gewünschte mit im Rasterelement angeben sollten. Ich habe das in meinem Code gemacht und es funktioniert wunderbar. HTH.
quelle
Auf diese Weise können Sie die scrollende TextBox in XAML verwenden und als Textbereich verwenden.
quelle
TextBlock
nicht aufTextBox
.Diese Antwort beschreibt eine Lösung mit MVVM.
Diese Lösung eignet sich hervorragend, wenn Sie einem Fenster ein Protokollierungsfeld hinzufügen möchten, das bei jedem Hinzufügen einer neuen Protokollierungsnachricht automatisch nach unten gescrollt wird.
Sobald diese angehängten Eigenschaften hinzugefügt wurden, können sie überall wiederverwendet werden, sodass eine sehr modulare und wiederverwendbare Software entsteht.
Fügen Sie diese XAML hinzu:
Fügen Sie diese angehängte Eigenschaft hinzu:
Und diese angehängte Eigenschaft (um die Box zu löschen):
Wenn Sie dann ein Abhängigkeitsinjektionsframework wie MEF verwenden, können Sie den gesamten protokollspezifischen Code in einem eigenen ViewModel ablegen:
So funktioniert das:
quelle
Ich mache das auf eine andere Weise, indem ich MaxHeight in ScrollViewer einsetze.
Passen Sie einfach die MaxHeight an, um mehr oder weniger Textzeilen anzuzeigen. Einfach.
quelle
Sie können verwenden
Diese sind angehängte Eigenschaft von wpf. Für mehr Informationen
http://wpfbugs.blogspot.in/2014/02/wpf-layout-controls-scrollviewer.html
quelle
Ich habe versucht, diese Vorschläge für einen Textblock zum Laufen zu bringen, konnte sie jedoch nicht zum Laufen bringen. Ich habe sogar versucht, es vom Designer zum Laufen zu bringen. (Schauen Sie im Layout nach und erweitern Sie die Liste, indem Sie unten auf den Abwärtspfeil "V" klicken.) Ich habe versucht, den Bildlauf-Viewer auf Sichtbar und dann auf Auto einzustellen , aber es wäre immer noch nicht.
Ich gab schließlich auf und änderte das
TextBlock
zu einemTextBox
mit dem Readonly- Attributsatz, und es funktionierte wie ein Zauber.quelle
Ich weiß nicht, ob jemand anderes dieses Problem hat, aber ich habe es
TextBlock
in eineScrollViewer
irgendwie durcheinandergebrachte Benutzeroberfläche eingepackt - als einfache Problemumgehung habe ich herausgefunden, dass dasTextBlock
durch einTextBox
ähnliches ersetzt wirdErstellt eine
TextBox
, die aussieht und sich wie eineTextBlock
mit einer Bildlaufleiste verhält (und Sie können alles im Designer tun).quelle
Dies ist eine einfache Lösung für diese Frage. Der vertikale Bildlauf wird nur aktiviert, wenn der Text überläuft.
<TextBox Text="Try typing some text here " ScrollViewer.VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" />
quelle