Mam TextBlock
WPF. Piszę do niego wiele linii, znacznie przekraczając jego wysokość pionową. Spodziewałem się, że pionowy pasek przewijania pojawi się automatycznie, gdy tak się stanie, ale tak się nie stało. Próbowałem poszukać właściwości paska przewijania w panelu Właściwości, ale nie mogłem jej znaleźć.
Jak mogę automatycznie utworzyć pionowy pasek przewijania, TextBlock
gdy jego zawartość przekroczy wysokość?
Wyjaśnienie: Wolę to zrobić od projektanta, a nie pisząc bezpośrednio do XAML.
TextBlock
dwa razy iTextBox
raz.Odpowiedzi:
Zawiń w przeglądarce przewijania:
UWAGA ta odpowiedź dotyczy
TextBlock
(elementu tekstowego tylko do odczytu), zgodnie z pierwotnym pytaniem.Jeśli chcesz pokazać paski przewijania w
TextBox
(edytowalnym elemencie tekstowym), użyjScrollViewer
dołączonych właściwości:Prawidłowe wartości dla tych dwóch właściwości są
Disabled
,Auto
,Hidden
iVisible
.źródło
TextBlock
nieTextBox
.może teraz korzystać z następujących opcji:
źródło
TextBlock
nieTextBox
(jak w tytule i linii początkowej), ale wspomnianego drugiego akapituTextBox
. Dla jasności, ta odpowiedź jest zdecydowanie najlepszym podejściem do pól tekstowych , a moje jest najlepsze, jakie znam dla bloków tekstowych :)Coś lepszego byłoby:
Zapewnia to, że tekst w bloku tekstowym nie przepełnia się i nie zachodzi na elementy pod blokiem tekstowym, co może mieć miejsce, jeśli siatka nie jest używana. Stało się tak, gdy wypróbowałem inne rozwiązania, mimo że blok tekstowy znajdował się już w siatce z innymi elementami. Należy pamiętać, że szerokość bloku tekstu powinna wynosić Auto i należy określić żądaną za pomocą elementu Grid. Zrobiłem to w moim kodzie i działa pięknie. HTH.
źródło
W ten sposób można użyć przewijanego TextBox w XAML i użyć go jako obszaru tekstowego.
źródło
TextBlock
nieTextBox
.Ta odpowiedź opisuje rozwiązanie wykorzystujące MVVM.
To rozwiązanie jest świetne, jeśli chcesz dodać okno logowania do okna, które automatycznie przewija się w dół za każdym razem, gdy dodawana jest nowa wiadomość logowania.
Po dodaniu tych dołączonych właściwości można je ponownie wykorzystać w dowolnym miejscu, dzięki czemu powstaje bardzo modułowe oprogramowanie do wielokrotnego użytku.
Dodaj ten XAML:
Dodaj tę dołączoną właściwość:
I ta załączona właściwość (aby wyczyścić pole):
Następnie, jeśli używasz struktury wstrzykiwania zależności, takiej jak MEF, możesz umieścić cały kod specyficzny dla rejestrowania w jego własnym ViewModel:
Oto jak to działa:
źródło
Robię to w inny sposób, umieszczając MaxHeight w ScrollViewer.
Wystarczy dostosować MaxHeight, aby wyświetlić więcej lub mniej wierszy tekstu. Łatwy.
źródło
Możesz użyć
Są to załączone właściwości wpf. Po więcej informacji
http://wpfbugs.blogspot.in/2014/02/wpf-layout-controls-scrollviewer.html
źródło
Próbowałem przekonać te sugestie do działania dla bloku tekstowego, ale nie udało mi się go uruchomić. Próbowałem nawet przekonać projektanta do pracy. (Spójrz w Układ i rozwiń listę, klikając strzałkę w dół „V” u dołu) Próbowałem ustawić przeglądarkę przewijania na Widoczne, a następnie Auto , ale nadal nie działało.
I w końcu poddał się i zmienił
TextBlock
DoTextBox
z Readonly zestawu atrybutów, i to działało jak czar.źródło
Nie wiem, czy ktoś inny ma ten problem, ale zawijanie go
TextBlock
w jakiśScrollViewer
sposób pomieszało mój interfejs - jako proste obejście doszedłem do wniosku, że zastąpienieTextBlock
go takimTextBox
jak tentworzy,
TextBox
który wygląda i zachowuje się jakTextBlock
z paskiem przewijania (i możesz to wszystko zrobić w projektancie).źródło
To proste rozwiązanie tego pytania. Przewijanie w pionie zostanie aktywowane tylko wtedy, gdy tekst się przepełni.
<TextBox Text="Try typing some text here " ScrollViewer.VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" />
źródło