2012-01-27 2 views
0

Я хочу синхронизировать две полосы прокрутки; когда пользователь вверх/вниз scroll2 автоматически устанавливает scroll1 с тем же положением. Scroll2 является экземпляром RichTextBox и scroll1 является экземпляром ListView. Я понятия не имею, как это сделать. Любая помощь очень ценится. Заранее спасибо.Как синхронизировать две полосы прокрутки?

UPDATE

Я думаю, теперь ближе .. мой текущий код:

XAML:

<RichTextBox ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible" Name="TextInput" AcceptsReturn="True" TextChanged="TextChangedEventHandler" Margin="0,23,0,9" ScrollViewer.ScrollChanged="OnScrollChangedHandler" HorizontalScrollBarVisibility="Visible" Grid.RowSpan="2" Grid.ColumnSpan="9" HorizontalAlignment="Right" Width="432.493"> 
      <RichTextBox.Resources> 
       <Style TargetType="{x:Type Paragraph}"> 
        <Setter Property="Margin" Value="0"/> 
       </Style> 
      </RichTextBox.Resources> 
     </RichTextBox> 

    <ScrollViewer Name="ScrollRow" VerticalScrollBarVisibility="Visible" ScrollViewer.ScrollChanged="OnRowsScrollChangedHandler" ScrollViewer.HorizontalScrollBarVisibility="Visible" Grid.RowSpan="2" Margin="0,23,0,7.02" HorizontalAlignment="Left" Width="40"> 
        <StackPanel Name="pScrollRow"> 
         <ListView Margin="0,23,0,9" Name="Rows"> 
         1. 
         </ListView> 
      </StackPanel> 
      </ScrollViewer> 

C# код:

// ... 

private void OnScrollChangedHandler(object sender, ScrollChangedEventArgs e) 
     { 
      ((IScrollInfo)pScrollRow).SetHorizontalOffset(e.HorizontalOffset); 
     } 

ответ

1

Добавьте обработчик событий для ScrollBar.ValueChanged для обоих полей и измените их ScrollBar.Value друг на друга на соответствующее значение. Я не тестировал это, но кажется разумным! Удачи!

+2

+1 не забудьте добавить рекурсивный булевский флаг, чтобы избежать StackOverflow ... –

+0

Было первое, что я подумал, но проблема в том, как получить/установить позиции прокрутки. Я не знаю, как мне их получить. – Jack

1

Я бы предложил вам добавить привязку Element для синхронизации значений, поэтому вам не нужен какой-либо код. Вот информация о MSDN о привязке элемента.

+0

хорошо .. Я попробовал, но он возвращает следующую ошибку: 'A 'Binding' не может использоваться в коллекции ItemCollection. «Связывание» может быть установлено только в DependencyProperty объекта DependencyObject. «Вы можете отправить пример кода? – Jack

Смежные вопросы