c# scrollerview滚动到指定元素位置
demo示例为在scrollview中绑定stackpanel,并在其中初始化一些textblock,滚动到指定的textblock
页面
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<DockPanel>
<Button Click="Button_Click" Content="test" DockPanel.Dock="Top"/>
<ScrollViewer Name="scrollViewer" HorizontalScrollBarVisibility="Visible">
<StackPanel Orientation="Horizontal" Name="stackPanel">
</StackPanel>
</ScrollViewer>
</DockPanel>
</Grid>
</Window>
滚动相关逻辑
using System.Windows;
using System.Windows.Controls;
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 30; i++)
{
stackPanel.Children.Add(new TextBlock() { Text = i.ToString(), Width = 80 });
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var element = stackPanel.Children[20] as FrameworkElement;
// 获取元素在ScrollViewer坐标系中的边界
Rect elementBounds = element.TransformToVisual(scrollViewer)
.TransformBounds(new Rect(0, 0,
element.ActualWidth,
element.ActualHeight));
//// 获取ScrollViewer的可见区域
//Rect scrollViewport = new Rect(scrollViewer.HorizontalOffset,
// scrollViewer.VerticalOffset,
// scrollViewer.ViewportWidth,
// scrollViewer.ViewportHeight);
// 减去当前的滚动偏移,得到相对于滚动区域原点的坐标
double scrollableAreaOffsetX = elementBounds.Left + scrollViewer.HorizontalOffset;
double scrollableAreaOffsetY = elementBounds.Top + scrollViewer.VerticalOffset;
// 或者直接得到相对于滚动区域左上角的坐标
Point absoluteScrollPosition = new Point(elementBounds.Left + scrollViewer.HorizontalOffset,
elementBounds.Top + scrollViewer.VerticalOffset);
//scrollViewer.ScrollToHorizontalOffset(elementBounds.Left);
scrollViewer.ScrollToHorizontalOffset(absoluteScrollPosition.X);
}
}
}
留待后查,同时方便他人
联系我:ivesbao@163.com
联系我:ivesbao@163.com

浙公网安备 33010602011771号