Я написал некоторый код для тестирования, и похоже, что он работает.Может быть, это даст вам представление о том, как решить вашу проблему.Вы можете просто заблокировать просмотрщик прокрутки и затем сместить его на элемент, который вы хотите отобразить, или просто отключить прокрутку «позже», потому что для меня это, похоже, не меняет вид.Если вы добавляете элементы динамически, VisualTreeView может помочь вам в дальнейшем.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" MinWidth="200" />
</Grid.ColumnDefinitions>
<ScrollViewer x:Name="SomeScrollViewer">
<StackPanel x:Name="LotsOfItems" HorizontalAlignment="Center" />
</ScrollViewer>
<StackPanel Grid.Column="1">
<Button
x:Name="OffsetButton"
Click="OffsetButton_Click"
Content="Offset" />
<Button
x:Name="LockButton"
Click="LockButton_Click"
Content="Lock/Unlock" />
</StackPanel>
</Grid>
Код позади
public MainPage()
{
this.InitializeComponent();
for (int i = 0; i < 50; i++)
{
LotsOfItems.Children.Add(new TextBlock() { Text = "Some item in a scrollviewer: " + i.ToString() });
}
}
private void OffsetButton_Click(object sender, RoutedEventArgs e)
{
SomeScrollViewer.ChangeView(0, 250, 1f);
}
private void LockButton_Click(object sender, RoutedEventArgs e)
{
if (SomeScrollViewer.VerticalScrollMode == ScrollMode.Disabled)
{
SomeScrollViewer.VerticalScrollMode = ScrollMode.Enabled;
SomeScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
}
else
{
SomeScrollViewer.VerticalScrollMode = ScrollMode.Disabled;
SomeScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
}
}