Я представляю текст в элементе управления WPF TextBlock (.Net 3.5). Содержимое текстового блока меняется в зависимости от того, что пользователь выбирает в списке. Текст переносится, поэтому мне не нужна горизонтальная полоса прокрутки. Однако текста часто бывает больше, чем может отображать окно, поэтому мне нужна вертикальная полоса прокрутки.
Когда я начал поиск, я быстро обнаружил, что ответ - обернуть TextBlock в ScrollViewer. Однако это не работает (TM), и я надеюсь, что кто-то может помочь мне разобраться, почему.
Это структура кода пользовательского интерфейса:
<Window x:Class=..>
<StackPanel>
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Top" Height="200"
SelectionChanged="listbox_changed" SelectionMode="Single">
</ListBox>
<Button Click="Select_clicked">Select</Button>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<TextBlock Name="textblock" TextWrapping="Wrap"/>
</ScrollViewer>
</StackPanel>
</Window>
Когда пользователь выбирает элемент в списке, появляется текст связанный с этим элементом представлен в TextBlock. Я бы подумал, что код в его нынешнем виде должен быть всем, что требуется, но он никогда не предоставляет мне полосу прокрутки.
Поиск и эксперименты дали мне две подсказки: корень проблемы мог быть связан с тем, что я обновлял содержимое TextBlock динамически и что TextBlock не изменяет свой размер в зависимости от нового содержимого. Я нашел сообщение, которое казалось актуальным, в котором говорилось, что, установив высоту TextBlock на его ActualHeight (после изменения его содержимого), он будет работать. Но этого не произошло (я не вижу эффекта от этого).
Во-вторых, если я установлю высоту (во время разработки) ScrollViewer, то я получу вертикальную полосу прокрутки. Например, если я установил для него значение 300 в приведенном выше xaml, результат будет почти хорошим в том смысле, что первое открытое окно содержит TextBlock с вертикальной полосой прокрутки, когда (и только когда) мне это нужно. Но если я увеличиваю окно (изменяя его размер с помощью мыши во время выполнения), ScrollViewer не использует новый размер окна и вместо этого сохраняет его высоту в соответствии с xaml, что, конечно же, не годится.
Надеюсь, я ' я просто упустил из виду кое-что очевидное ..
Спасибо!