2009-12-30 20 views
18

ScrollViewer içinde kendi penceresine uzanan bir hizalama içinde bir TextBlock var. Aşağıdaki gibi davranmasına TextBlock gerekir: Belli bir genişlik aşağıda resized zaman C# WPF - ScrollViewer + TextBlock sorunları

  • TextBlock ihtiyaçları tutmak için

    • pencere ile yeniden boyutlandırır, hiçbir kaydırma çubukları bir MinWidth ve kaydırma çubukları
    • TextWrapping veya TextTrimming çalışması gerekir görünmelidir uygun olarak

    Bu işlevselliği nasıl edinebilirim?

    Bağlantıları ActualWidth & ActualHeight ile ilgili birkaç yolu denedim, ancak işe yaramayabilir.

    Bu zor olamaz, neyi özlüyorum? Daha ayrıntılı olmadan

    <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

    Açıklama: scrollviewer kontrolün şablonuna dahil edilmiş mi? Yoksa kontrolün dışında mı? –

    +0

    Yukarıdaki gibi görünüyormuş gibi yapabilirsiniz. – jonathanpeppers

    cevap

    23

    Bu çalışır:

    <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

    Evet, bu, düzen motorunun görsel ağacında birkaç kez dönmesine neden olsa da, bir başka yol geçişine neden olan, görüntülemeden sonra genişlik bağlaması gerçekleşeceğinden, bir yoldur. –

    +1

    Başka bir yolu var mı? – jonathanpeppers

    +0

    Evet, uygun bir yöntem, ölçüyü değiştirmek ve kaydırma görüntüleyici, metin bloğu veya aralarındaki bazı özel öğeler için mantığı düzenlemek olacaktır. Yeniden yorumlama yaparken 'Benim üzerinde çalışıyorum' yorumunu yazdığımdan beri beynimi parçalamaya çalışıyorum :) –

    2

    , bunu yapmanın standart bir yol sağlar edilir yapabileceği en iyi: Burada

    XamlPad koymak için bir kod örneği (hiçbir MinWidth henüz ayarlanır) 'dir. Temel olarak, bir kaydırma görüntüleyicide öğenizi (minimum boyuta sahip) barındırın; scrollviewer, elemanın içine tamamen sığamayacak kadar küçük bir şekilde yeniden boyutlandırıldığında, kaydırma çubuklarını otomatik olarak görüntüler. Örnek:

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

    Hmm, bu XamlPad'de çalışıyor, ancak benim uygulamamda değil. Nedenini anlamak için biraz kazımak zorundayım. – jonathanpeppers

    +0

    Çünkü benim kontrolüm bir TextBlock. Yukarıdaki düzenlemeye bakın. – jonathanpeppers

    +0

    Elde etmeye çalıştığınız davranış tam olarak nedir? "TextBlock" da "MinWidth" ve "MinHeight" ayarlandığında da çalışmalıdır. –

    İlgili konular