Элементы DockPanel, которые используют одну и ту же полосу прокрутки? - PullRequest
1 голос
/ 29 ноября 2011

Вот код, который у меня есть:

<ScrollViewer Grid.Row="2" CanContentScroll="True">
      <DockPanel>
           <TreeView x:Name="tView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>

           <TreeView Name="pluginsView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>
      </DockPanel>
</ScrollViewer>

Я ДОЛЖЕН определить 2 TreeView.Они находятся в одной и той же «области» (в том же [Строка, Столбец]), поэтому мне пришлось использовать Panel.Я использовал StackPanel, но дисплей был не тем, что я хотел.Я использовал ScrollViewer, чтобы получить общую полосу прокрутки для двух TreeView, когда они не соответствуют по размеру пространству «области».

У меня проблема в горизонтальном положении.Когда 1 из моих 2 TreeView слишком "большой", я получил полосу прокрутки, которая появляется, но только для слишком большого TreeView, поэтому при прокрутке только один из моих TreeView перемещается горизонтально.Я хочу, чтобы при прокрутке оба TreeView двигались горизонтально.

Я не знаю, достаточно ли это ясно, я могу загружать снимки экрана, если не ясно!

Я пробовал этокод тоже, но он тоже не работает:

<ScrollViewer Grid.Row="2" CanContentScroll="True">
      <Grid Grid.Row="2">
           <Grid.RowDefinitions>
               <RowDefinition Height="Auto" />
               <RowDefinition Height="Auto" />
           </Grid.RowDefinitions>
           <TreeView Grid.Row="0" x:Name="tView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>

           <TreeView Grid.Row="1" Name="pluginsView" DockPanel.Dock="Top" VerticalAlignment="Stretch">
               [...]
           </TreeView>
      </DockPanel>
</ScrollViewer>

но у меня точно такая же проблема ..: (

Ответы [ 3 ]

6 голосов
/ 29 ноября 2011

Звучит так, будто для прокрутки содержимого используется внутренний ScrollViewer TreeView *, а не внешний ScrollViewer.

Обычно это связано с тем, что содержимое внутри ScrollViewer каким-то образом ограничено в размере, поэтому убедитесь, что вы не ограничиваете размер TreeView или его родительской панели в любом случае. Это будет включать вертикальное / горизонтальное выравнивание, установленное на растяжение.

Вот пример, который работает для плавной прокрутки в обоих направлениях. Я был немного удивлен, что мне пришлось установить HorizontalScrollBarVisibility в теге <ScrollViewer>, чтобы отобразить горизонтальную полосу прокрутки.

<Border BorderBrush="Black" BorderThickness="2" Height="100" Width="100">
    <ScrollViewer CanContentScroll="True"
                  HorizontalScrollBarVisibility="Auto"  
                  VerticalScrollBarVisibility="Auto">
        <DockPanel>
            <Rectangle Height="75" Width="150" Fill="Red" DockPanel.Dock="Top" />
            <Rectangle Height="75" Width="150" Fill="Blue" />
        </DockPanel>
    </ScrollViewer>
</Border>
0 голосов
/ 30 ноября 2011

После нескольких часов испытаний у меня сработало вот что:

 <ScrollViewer Grid.Row="2" HorizontalScrollBarVisibility="Auto">
     <DockPanel ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <TreeView x:Name="tView" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                [...]
            </TreeView>

            <TreeView Name="pluginsView" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                [...]
            </TreeView>
      </DockPanel>
  </ScrollViewer>

Чтобы это работало, вам нужно отключить видимость TreeViews и Grid, и вы должны использовать HorizontalScrollBarVisibility = "Auto" в ScrollViewer!

0 голосов
/ 29 ноября 2011

Попробуйте отключить горизонтальные ScrollViewer деревьев.Таким образом, упаковка ScrollViewer должна будет открыться.

XAML:

<ScrollViewer Grid.Row="2" CanContentScroll="True">
      <Grid>
           <Grid.RowDefinitions>
               <RowDefinition Height="*" />
               <RowDefinition Height="*" />
           </Grid.RowDefinitions>
           <TreeView Grid.Row="0" x:Name="tView" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
               [...]
           </TreeView>

           <TreeView Grid.Row="1" Name="pluginsView" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
               [...]
           </TreeView>
      </Grid>
</ScrollViewer>
...