Подтвердить что ты не робот

С# WPF - проблемы с ScrollViewer + TextBlock

У меня есть TextBlock внутри ScrollViewer, который выравнивается с растяжением к его окну. Мне нужно TextBlock вести себя следующим образом:

  • Изменяет размер с помощью окна, без прокрутки.
  • При изменении размера ниже определенной ширины TextBlock необходимо оставить MinWidth и полосы прокрутки
  • TextWrapping или TextTrimming должны работать надлежащим образом

Как я могу получить эту функциональность?

Я пробовал несколько способов, включая привязки к 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>
4b9b3361

Ответ 1

Это работает:

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

Ответ 2

Без подробностей лучше всего я могу обеспечить стандартный способ сделать это. В основном, разместите свой элемент (который имеет минимальный размер) в средстве просмотра прокрутки; когда scrollviewer изменяется настолько мало, что элемент не может полностью вписаться в него, он автоматически отображает полосы прокрутки. Пример:

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

Ответ 3

Если у вас более сложный макет и он не может привязываться к ScrollViewer, то в ответе fooobar.com/info/281937/... может помочь.