我在wpf TextBlock控件(.Net 3.5)中呈現文本。文本塊的內容取決於用戶在列表框中選擇的內容。文字包裝,所以我不需要水平滾動條。但是,通常有更多的文本不能顯示窗口的數量,所以我需要一個垂直滾動條。無法在WPF TextBlock中獲得垂直滾動條
當我開始搜索時,我很快發現答案是將TextBlock包裝在ScrollViewer中。但是,它不工作(TM),我希望有人可以幫我找出原因。
這是UI代碼的結構:
<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的高度(在設計時間內),那麼我會得到一個垂直滾動條。例如,如果我在上面的xaml中將它設置爲300,那麼結果幾乎是好的,因爲當我需要它時,第一次打開的窗口包含一個帶有垂直滾動條的TextBlock。但是,如果我使窗口更大(在運行時用鼠標調整大小),ScrollViewer不會利用新的窗口大小,而是根據xaml保持其高度,當然這不會。
希望,我只是忽略了一些東西明顯..
謝謝!
使用Grid而不是StackPanel取得了訣竅。謝謝! – Kristoffer 2011-04-11 13:27:49