2015-01-31 5 views
1

У меня есть scrollviewer с шаблоном элемента на нем. пользователь отправляет контрольный номер, и мне нужно перейти к этому элементу. Как найти смещение для scrollviewer?ScrollViewer прокрутите до определенного элемента управления

вот ScrollViewer, что я использую

<ScrollViewer Grid.Row="0" x:Name="ScrollPanel" Padding="0"> 
    <Grid x:Name="TestPanel" > 
     <ItemsControl x:Name="MainItemsControl" ItemsSource="{Binding PostList}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <StackPanel x:Name="PostPanel" Margin="0,5,0,5"> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="60" /> 
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="Auto" /> 
          </Grid.ColumnDefinitions> 
          <Image x:Name="IconUrl" Source="{Binding IconUrl}" Grid.Row="0" Grid.Column="0" Margin="12,0,12,0" VerticalAlignment="Center" HorizontalAlignment="Center" Width="50"/> 
          <StackPanel Grid.Row="0" Grid.Column="1"> 
           <TextBlock x:Name="PostAuthorName" Text="{Binding PostAuthorName}" TextWrapping="NoWrap" Margin="12,0,12,0" Foreground="Black" Style="{StaticResource PhoneTextNormalStyle}"/> 
           <TextBlock x:Name="PostTime" Text="{Binding PostTime}" TextWrapping="NoWrap" Margin="12,0,12,0" Foreground="Black" Style="{StaticResource PhoneTextSubtleStyle}"/> 
          </StackPanel> 
          <TextBlock x:Name="ReplyNumber" Text="{Binding ReplyNumber}" Grid.Row="0" Grid.Column="2" TextWrapping="NoWrap" Foreground="Black" Margin="12,0,12,0" Style="{StaticResource PhoneTextNormalStyle}" VerticalAlignment="Center"/> 
         </Grid> 
         <RichTextBox x:Name="PostContent" localcontrols:Properties.BBCode="{Binding PostContent}" /> 
         <Rectangle Grid.Row="1" Fill="Gray" Height="1" HorizontalAlignment="Stretch" Margin="0,10,0,10"/> 
        </StackPanel> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Grid> 
</ScrollViewer> 
+0

какая версия Windows Phone? это важно, поэтому вы должны упомянуть об этом - с правильным тегом. – kennyzx

+0

Спасибо, его телефон с окнами 8 –

ответ

0

Смещение может быть рассчитано таким образом. Код принят от this answer.

void ScrollToIndex(int index) 
{ 
    var itemContainer = MainItemsControl.ItemContainerGenerator.ContainerFromIndex(index) as UIElement; 
    GeneralTransform transform = itemContainer.TransformToVisual(ScrollPanel); 
    Point position = transform.Transform(new Point(0, 0)); 
    ScrollPanel.ScrollToVerticalOffset(position.Y); 
} 
+0

Я пробую эту технику, однако я возвращаю null для itemContainer. элемент действительно возвращается правильно. –

+1

Хорошо, я получил это, чтобы работать, но мне пришлось добавить UpdateLayout() перед второй строкой, чтобы он работал. Он также работал, если я сделал var itemContainer = MainItemsControl.ItemContainerGenerator.ContainerFromIndex (index); вместо первой строки Единственная проблема, с которой я столкнулся, - это то, что все еще обновляется на странице, и, поскольку это выполняется, содержимое выше становится длиннее, и элемент, который я хотел увидеть, сдвигается со дна. Я уверен, что мне просто нужно убедиться, что он запущен после того, как все загружено. –

+0

@PCUR рад, что вы это сделали. Я буду отлаживать код из ваших отзывов и обновлять свой ответ, когда я нахожусь на своем компьютере. – kennyzx

0

ItemsControl не реализует логику, которая позволяет прокручивать к конкретному пункту. Вместо этого вы можете использовать элемент управления ListBox. Этот элемент управления имеет метод ScrollIntoView, который принимает объект, который вы хотите прокрутить в качестве аргумента. Вы все еще можете использовать RadWrapPanel, установив свойство ItemsPanel элемента управления ListBox.

У вас нет свойств, но для этого у вас есть два метода: ScrollToVerticalOffset (для прокрутки по вертикали) и ScrollToHorizontalOffset (для прокрутки по горизонтали).

this.scrollViewer2.ScrollToVerticalOffset(0); 
Смежные вопросы