#wpf #scrollviewer
#wpf #scrollviewer
Вопрос:
Рассмотрим следующий сценарий, представляющий список элементов с левой стороны и подробную информацию о выбранном элементе с правой стороны:
<ScrollViewer Name="scroll1" >
<DockPanel>
<ScrollViewer Name="scroll2" DockPanel.Dock="Left" >
<Really Long List Box />
</ScrollViewer>
<Selected Item Details />
</DockPanel>
</ScrollViewer>
(В приведенном выше коде scroll2 всегда отключен.)
В некоторых случаях высота «Сведений о выбранном элементе» может превышать высоту окна. В этих случаях scroll1 должен быть включен. Но в большинстве случаев это не так. Единственный элемент управления, превышающий высоту окна, — это «Действительно длинный список», поэтому должен быть включен только scroll2.
Я знаю, что самый простой способ — разместить scroll1 прямо над «Деталями выбранного элемента» следующим образом:
<ScrollViewer Name="scroll1" >
<Selected Item Details />
</ScrollViewer>
Но это собственный фреймворк, который разделен на несколько пользовательских элементов управления, а элемент управления scroll1 служит только в качестве заполнителя для дочерних элементов управления, поэтому я не могу его удалить.
Есть ли какой-либо способ включить только scroll2, когда «Сведения о выбранном элементе» помещаются в окне?
Ответ №1:
Если вы явно не задаете высоту и ширину scrollviewer, то он примет высоту и ширину родительского элемента. В этом случае похоже, что scroll2 принимает высоту и ширину панели dock, поэтому прокрутка scroll2 не включена. Попробуйте установить высоту и ширину scroll2, и вы сможете прокручивать его.
Комментарии:
1. Пришлось установить для него привязку: <Имя ScrollViewer=»scroll2″ DockPanel.Dock=»Left» Height=»{Имяэлемента привязки=DockPanel, Path= ActualHeight}» > но это сработало отлично.