Как указать, какой scrollviewer следует использовать

#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}» > но это сработало отлично.