Soru C # WPF - ScrollViewer + TextBlock sorunları


Benim bir TextBlock içinde ScrollViewer Bu pencere ile streç ile hizalar. ihtiyacım var TextBlock aşağıdaki gibi davranmak:

  • Pencere ile yeniden boyutlandırılır, kaydırma çubuğu yok
  • Belirli bir genişliğin altında yeniden boyutlandırıldığında TextBlock bir tutmak gerekir MinWidth  ve kaydırma çubukları görünmelidir
  • TextWrapping veya TextTrimming uygun şekilde çalışmalı

Bu işlevselliği nasıl alabilirim?

Bağlamaları içeren çeşitli yollar denedim ActualWidth & ActualHeightama işe yaramıyor.

Bu zor olamaz, neyi özlüyorum?

İşte XamlPad içine koymak için bir kod örneği (MinWidth henüz ayarlanmamıştı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">
            <TextBlock TextWrapping="Wrap" Text="Some really long text that should probably wordwrap when you resize the window." />
    </ScrollViewer>
</Window>

18
2017-12-30 16:44


Menşei


Açıklama: scrollviewer kontrol şablonuna yerleştirilmiş mi? Yoksa kontrolün dışında mı? - Aviad P.
Yukarıdaki gibi görünüyormuş gibi yapabilirsin. - jonathanpeppers


Cevaplar:


Bu çalışıyor:

<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>

24
2017-12-30 19:56



Evet, bu bir yoldur, ancak düzen motoru, görsel ağacında birkaç kez dönmesine neden olabilir, çünkü genişleme bağlaması, oluşturma işleminden sonra gerçekleşir, bu da başka bir düzen geçişini zorlar. - Aviad P.
Başka bir yolu var mı? - jonathanpeppers
Evet, ö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 uygun bir yöntem olurdu. Beynimi, 'Ben üzerinde çalışıyorum' yorumunu yazdığımdan beri anlamaya çalışıyorum. - Aviad P.
Ekstra düzen geçişini engellemek için bir yol bulursanız, pencereyi yeniden boyutlandırırken, makinemde (karmaşık uygulamamda tam uygulamamda) küçük bir laggy gibi görünüyor. - jonathanpeppers
TEŞEKKÜR EDERİM! TEŞEKKÜR EDERİM! TEŞEKKÜR EDERİM! OMG Ben sadece 2 saat çözüm arıyorum ve ViewportWidth için Binding hile yaptı! Çok teşekkür ederim. - Kirill Osenkov


Daha fazla ayrıntıya girmeden yapabileceğim en iyi şey, bunu yapmanın standart yolunu sağlamaktır. 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>

2
2017-12-30 17:03



Hmm, bu XamlPad'de çalışıyor, ancak benim uygulamamda değil. Nedenini anlamak için biraz kazımak zorundayım. - jonathanpeppers
Çünkü benim kontrolüm bir TextBlock. Yukarıdaki düzenlemeye bakın. - jonathanpeppers
Başarmaya çalıştığınız davranış tam olarak nedir? Ayarladığınızda işe yarayacak MinWidth ve MinHeight üzerinde TextBlock de. - Aviad P.
Yukarıdaki metni XamlPad'de denerseniz, yeniden boyutlandırdığınızda, TextBlock asla yeniden boyutlandırılmaz. - jonathanpeppers
Oh, ne demek istediğini görüyorum, çünkü metin sarma. Üzerinde çalışmak :) - Aviad P.


Daha karmaşık bir düzeniniz varsa ve ScrollViewer sonra IgnoreWidthControl cevapta https://stackoverflow.com/a/41281041/254109 yardımcı olabilir.


0
2017-12-22 13:42