UWP 将滚动查看器锁定在某个位置
UWP lock scrollviewer in a position
我有一个滚动查看器想在一个动作中将其锁定在特定的滚动位置,并且必须在另一个动作中释放它。
- 我试过启用和禁用
VerticalScrollMode
它改变了
滚动位置。
MyScrollViewer.VerticalScrollMode = ScrollMode.Disabled;
- 我也尝试过更改
VerticalScrollBarVisibility
它将垂直偏移设置到顶部
MyScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
想知道有没有办法将滚动查看器锁定在特定的偏移量?
我写了一些代码来测试它,它似乎可以工作。也许它会给你一个想法如何解决你的问题。您可以简单地锁定滚动查看器,然后将其偏移到您要显示的项目或简单地禁用滚动 'later',因为对我来说,它似乎不会改变视图。如果您动态添加项目,那么 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;
}
}
这是一种非常简单的方法,但也许您可以在此基础上进一步实现您想要的。
public double offset = 0.0;
在禁用滚动条之前保存偏移量:
offset = ScrView.HorizontalOffset;
ScrView.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
禁用后,将偏移值添加回滚动条
ScrView.ChangeView(offset, null, null, false);
我有一个滚动查看器想在一个动作中将其锁定在特定的滚动位置,并且必须在另一个动作中释放它。
- 我试过启用和禁用
VerticalScrollMode
它改变了 滚动位置。
MyScrollViewer.VerticalScrollMode = ScrollMode.Disabled;
- 我也尝试过更改
VerticalScrollBarVisibility
它将垂直偏移设置到顶部
MyScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;
想知道有没有办法将滚动查看器锁定在特定的偏移量?
我写了一些代码来测试它,它似乎可以工作。也许它会给你一个想法如何解决你的问题。您可以简单地锁定滚动查看器,然后将其偏移到您要显示的项目或简单地禁用滚动 'later',因为对我来说,它似乎不会改变视图。如果您动态添加项目,那么 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;
}
}
这是一种非常简单的方法,但也许您可以在此基础上进一步实现您想要的。
public double offset = 0.0;
在禁用滚动条之前保存偏移量:
offset = ScrView.HorizontalOffset;
ScrView.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;
禁用后,将偏移值添加回滚动条
ScrView.ChangeView(offset, null, null, false);