当前位置: 首页 > news >正文

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);}}
}
http://www.jsqmd.com/news/377515/

相关文章:

  • 类似Jira的软件哪个好?2026年类似Jira的软件推荐与排名,解决定制化与数据迁移核心痛点 - 十大品牌推荐
  • 赶deadline必备!千笔·专业论文写作工具,本科生专属AI论文网站
  • 2026咖啡连锁全自动咖啡机推荐 商用高效稳定机型精选 适配多场景 - 品牌2025
  • (11-4-03)完整人形机器人的设计与实现案例:盲踩障碍物
  • 2026冲刺用!千笔·降AI率助手,标杆级的降AIGC平台
  • 个人思考3——世界动作模型
  • 《卷2:人形机器人的环境感知与多模态融合》
  • 详细介绍:39M参数撬动百亿市场:Whisper-Tiny.en引领嵌入式语音交互革命
  • vue3的组件间通信ref子组件需要把父组件要的ref数据开放
  • 春节档电影推荐与口碑讨论:我为什么把《惊蛰无声》列进“全家都能看”的优先清单 - SFMEDIA
  • 【计算机基础】-49-Slab与Memory Pool内存空间来自哪里?初始化过程?申请和释放方法?代码示例?
  • 支持OpenClaw智能体管理,新增企业微信、钉钉和飞书告警通知,1Panel v2.1.0版本发布
  • .Net Hangfire延长超时作业(默认30分钟),重复执行问题
  • 线上服务重启后,从nacos取不到配置了,怎么回事
  • 2026智能门窗市场剖析:这家公司表现如何?被动式窗/别墅装修/欧式门窗/豪宅设计/隔音门窗,智能门窗供应商哪家好 - 品牌推荐师
  • 1.5 AI技术栈三层架构:从应用到基础设施的完整拆解
  • 永辉超市购物卡兑换现金秘籍 - 团团收购物卡回收
  • 2.1 训练数据决定模型上限:多语言与领域数据详解
  • Linux_21:音频AI模块
  • 2026年无锡专业汽车零部件检测设备厂家直销价格及性价比分析 - mypinpai
  • 1.3 10大应用场景盘点:大模型落地实战全解析
  • 2026年最新版|番茄畅听下载与电脑版安装全流程详解 - PC修复电脑医生
  • 基于“链动2+1模式AI智能名片S2B2C商城小程序”的客户全生命周期价值最大化研究
  • 【计算机基础】-47-Buddy和Small Memory使用相同的API rt_malloc(), 他们能并存吗?如何区分?
  • 全网首测!MiniMax M2.5发布,跑OpenClaw实测真香
  • 10 个新颖的 Python 毕业设计题目
  • 【计算机基础】-48-Slab与Memory Pool可以共存吗?他们的API函数相同吗?代码示例
  • MIT_65840 Lab2 KV Server 与分布式锁
  • iPaaS从连接到智能:企业集成平台选型进入新阶段
  • 分期乐购物额度怎么提取?零基础新手也能轻松搞定! - 团团收购物卡回收