2009-12-30 89 views
18

我有一個TextBlockScrollViewer與拉伸窗口對齊。我需要的TextBlock表現爲以下幾點:C#WPF - ScrollViewer + TextBlock問題

  • 調整大小與窗口,沒有滾動條
  • 當調整具有一定的寬度低於TextBlock需要保持MinWidth和滾動條應出現
  • TextWrappingTextTrimming應該工作適當的

如何獲得此功能?

我已經嘗試了幾種方法,涉及綁定到ActualWidth & ActualHeight,但無法讓它工作。

這不可能那麼困難,我錯過了什麼?

下面是一個代碼示例放在XamlPad(不MinWidth設置尚未):

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <TextBlock TextWrapping="Wrap" Text="Some really long text that should probably wordwrap when you resize the window." /> 
    </ScrollViewer> 
</Window> 
+0

說明:scrollviewer是否內置在控件的模板中?或者它在控制之外? –

+0

你可以假裝它看起來像上面那樣。 – jonathanpeppers

回答

23

這工作:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Name="Scroller"> 
      <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="100" Width="{Binding ElementName=Scroller, Path=ViewportWidth}" 
      TextWrapping="Wrap" Text="Some really long text that should probably wordwrap when you resize the window." /> 
    </ScrollViewer> 
</Window> 
+1

是的,這是一種方法,雖然它可能導致佈局引擎在可視樹上循環多次,因爲寬度綁定發生在渲染之後,這會強制另一個佈局傳遞。 –

+1

還有別的辦法嗎? – jonathanpeppers

+0

是的,正確的方法是修改度量併爲滾動查看器,文本塊或中間的某個自定義元素排列邏輯。我一直在試圖弄明白,因爲我寫了評論'我正在努力':) –

2

沒有更詳細的,我能做的就是提供這樣的標準方式是最好的。基本上,在滾動查看器中託管你的元素(它有一個最小尺寸)當scrollviewer的大小調整得足夠小以至於元素不能完全適合它時,它會自動顯示滾動條。例如:

<ScrollViewer> 
    <Button MinWidth="100" MinHeight="50"/> 
</ScrollViewer> 
+0

嗯,這在XamlPad中有效,但不適用於我的應用程序。我將不得不做一些挖掘來弄清楚爲什麼。 – jonathanpeppers

+0

這是因爲我的控件是一個TextBlock。看到我上面的編輯。 – jonathanpeppers

+0

你想要達到的行爲究竟是什麼?當你在'TextBlock'上設置'MinWidth'和'MinHeight'時,它應該可以工作。 –