如何将图像“地标”放入 WPF 中的滚动条内?

2023-12-21

我有一个长滚动查看器,我想在滚动条上用小图像标记重要点。如果单击图像,滚动条将跳转到相应的内容。

我在一些应用程序(例如 Eclipse 和Chrome http://www.usabilitypost.com/2008/09/19/using-the-scrollbar-to-display-information/并想知道如何使用 WPF 重现它。


简短的回答是“更改 ScrollBar 的模板”。

长答案是...我将在 ScrollBar 控件的模板中添加一个 ItemsControl 。我会将此 ItemsControl 放在模板顶部,并将其 IsHitTestVisible 设置为 false,以便它不会捕获鼠标事件。

然后我将使用 Canvas 作为 ItemsPanelTemplate 以便能够正确放置这些点。我将使用数据绑定与 ItemsControl 的 ItemsSource 属性和 DataTemplate 以便使用图像呈现每个元素。

这是我使用 Blend 制作的示例。当然它并不完整(例如它不处理鼠标事件),但我希望它将成为您的起点。

alt text
(source: japf.fr http://www.japf.fr/download/scrollbars.png)

<ControlTemplate TargetType="{x:Type ScrollBar}">
    <Grid SnapsToDevicePixels="true" Background="{TemplateBinding Background}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}"/>
            <ColumnDefinition Width="0.00001*"/>
            <ColumnDefinition MaxWidth="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}"/>
        </Grid.ColumnDefinitions>
        <RepeatButton Style="{StaticResource ScrollBarButton}" Command="{x:Static ScrollBar.LineLeftCommand}" Microsoft_Windows_Themes:ScrollChrome.ScrollGlyph="LeftArrow"/>
        <Track x:Name="PART_Track" Grid.Column="1" d:IsHidden="True">
            <Track.Thumb>
                <Thumb Style="{StaticResource ScrollBarThumb}" Microsoft_Windows_Themes:ScrollChrome.ScrollGlyph="HorizontalGripper"/>
            </Track.Thumb>
            <Track.IncreaseRepeatButton>
                <RepeatButton Style="{StaticResource HorizontalScrollBarPageButton}" Command="{x:Static ScrollBar.PageRightCommand}"/>
            </Track.IncreaseRepeatButton>
            <Track.DecreaseRepeatButton>
                <RepeatButton Style="{StaticResource HorizontalScrollBarPageButton}" Command="{x:Static ScrollBar.PageLeftCommand}"/>
            </Track.DecreaseRepeatButton>
        </Track>
        <ItemsControl Grid.Column="1" HorizontalAlignment="Stretch">
            <sys:Double>10</sys:Double>
            <sys:Double>50</sys:Double>
            <sys:Double>100</sys:Double>
            <sys:Double>140</sys:Double>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Rectangle Fill="Orange" Width="3" Height="16"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <ItemsControl.ItemContainerStyle>
                <Style TargetType="ContentPresenter">
                    <Setter Property="Canvas.Left" Value="{Binding }" />
                </Style>
                                        </ItemsControl.ItemContainerStyle>
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>
        <RepeatButton Style="{StaticResource ScrollBarButton}" Grid.Column="2" Command="{x:Static ScrollBar.LineRightCommand}" Microsoft_Windows_Themes:ScrollChrome.ScrollGlyph="RightArrow" d:IsHidden="True"/>
    </Grid>
</ControlTemplate>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将图像“地标”放入 WPF 中的滚动条内? 的相关文章

  • WPF 中 ToggleButton 的 IsChecked 属性的 OneWay 绑定

    我有一个ToggleButton以其IsChecked使用 OneWay 绑定将属性绑定到属性
  • Prism RegionAdapter - 删除然后添加视图

    我有一个包含 AvalonDock 的 prism wpf mef 解决方案 我创建了一个RegionAdapterBase
  • ABSMIDDLE 在 Firefox 和 Chrome 上的工作方式不同吗?

    我有一个图标图像和文本 如下所示 一切的代码来源是 img src align left My Title Here 问题在于 与 Firefox 相比 Chrome 中的图标没有与标题垂直对齐 我觉得absmiddle根本不起作用 有什么
  • 如何从页面级别获取父框架?

    我有一个带有框架和几页的窗口 加载窗口时 框架导航到欢迎页面 当我单击欢迎页面内的按钮时 我希望父框架导航到另一个页面 为此 我需要从页面级别访问父框架 但我不知道如何执行此操作 我尝试了下面的代码 但它返回 null private vo
  • 无需画布,用纯 JS 生成图像

    如何在没有画布的情况下用纯 JavaScript 无外部库 从像素数组生成 绘制图片 我尝试以URI形式生成图像但没有成功 图片格式不容易快速理解和实现 BMP 数据URI 您可以使用以下函数生成 BMP 位图 dataURI 24 位的
  • 如何从 url Codenameone 创建图像

    我需要从具有图像 url 的字符串创建一个新的 Image 实例 E g http maps gstatic com mapfiles place api icons restaurant 71 png http maps gstatic
  • 如何将 ObservableCollection 绑定到 AvalonDock DocumentPaneGroup?

    我需要在 AvalonDock 2 0 中加载项目集合作为文档 这些对象继承自一个抽象类 我想根据哪个子类在文档中渲染一个框架 这是我的 XAML
  • CoreData:是否将图像存储到数据库?

    我正在制作一个应用程序 它从网站上为某些用户名拍摄照片 并将其显示在带有用户名的 UITable 中 然后当单击用户名时 它会显示该用户的照片 然后单击照片名称 它会显示全屏照片 我的问题是我正在使用 NSData 从互联网获取照片 我必须
  • 如何在 WPF 中实现虚线或点线边框?

    我有一个ListViewItem我正在申请Style到 我想把灰色虚线作为底部Border 我怎样才能在 WPF 中做到这一点 我只能看到纯色画笔 这在我们的应用程序中效果很好 允许我们使用真正的边框而不是乱用矩形
  • 重写 WPF 工具包图表中的 DataPointStyle

    我想覆盖DataPointStyle of the LineSeries在我的 WPF 工具包中Chart
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 如何在 Microsoft 报告中显示字节数组中的图像

    我使用报表文件和 ReportViewer 控件来显示在运行时从对象动态加载数据的报表 我需要显示一个以字节数组形式存储在对象中的图像 PictureBox 的值当前设置为 First Fields ImageData Value dtst
  • 无法使用 DialogResult

    我尝试使用DialogResult检查一个Messagebox s 是 否 取消 我正在使用以下代码 我没有看到任何问题 DialogResult dlgResult MessageBox Show Save changes before
  • Java:ImageIcon 与 Image 的区别

    谁能以菜鸟的方式向我解释一下两者之间有什么区别图像图标 and ImageJava 中的类 对象 谢谢 它们的性质和应用是不同的 Image http docs oracle com javase 6 docs api java awt I
  • 使 DataTemplate 可混合

    如何为 ViewModel 制作可混合的数据模板 可在表达式混合中设计 当我转到资源并尝试直接编辑数据模板时 我在绘图板上看到的只是一个空白矩形 这是因为 DataTemplate 没有绑定到任何东西 当然 我可以创建一个 UserCont
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy

随机推荐

  • 程序运行时出现 C++ STATUS_ACCESS_VIOLATION 错误

    每次我运行该程序时 都会弹出这个神秘的错误 表示我遇到了某种类型的状态访问冲突 我尝试用谷歌搜索它 结果是我可能试图访问一些不允许的内存 非常感谢您的帮助 这是我运行程序时出现的错误 2 main a 5772 exception hand
  • 在django模板中将负数转换为正数?

    如何在django模板中将负数转换为正数 for balance in balances balance amount endfor 如果balance amount是负数 我想将其转换为正数 我想建议安装Django 数学过滤器 http
  • D3 自定义曲线:区域的束插值

    考虑这个 D3JS 图 它使用basis插值 在 D3JS v3 中 我可以使用bundle插值 interpolate bundle tension 0 在区域上实现这种类型的渲染 请注意图表的每个部分如何与其相邻部分完美契合 这就是我需
  • 如何在Java中生成随机排列?

    生成 n 个数字的随机排列的最佳方法是什么 例如 假设我有一组数字 1 2 和 3 n 3 所有可能排列的集合 123 132 213 231 312 321 现在 我如何生成 上述集合的元素之一 随机选择 如上所示的整个排列集 换句话说
  • 与西纳特拉一起设计

    有谁安装过吗Devise https github com plataformatec devise西纳特拉的宝石 Devise 基于 Warden 因此它应该可以在 Sinatra 上运行 我找不到任何有关如何实现它的相关信息 Devis
  • 为每个元组对象添加描述?

    我有一个元组 var a new Tuple
  • AES 加密 Golang 和 Python

    我正在为自己做一个有趣的业余项目 一个 golang 服务器和一个 python 客户端 我希望传输的数据被加密 但似乎无法让两种加密方案一起工作 我是加密方面的新手 所以请像对幼儿说话一样解释 这是我的 golang 加密函数 impor
  • HttpClient-PostAsJsonAsync

    我在使用时遇到一个简单但烦人的问题PostAsJsonAsync
  • 如何使用 SQLite 从两个表中选择不同的记录,合并为一列,并消除另一个表中存在的所有记录?

    这是我现有的查询 它成功地从两个表中选择不同的记录并将它们组合成一列 SELECT index text AS unique text FROM words UNION SELECT c1index text FROM words cont
  • 创建 Java 应用程序作为 Windows 服务运行

    我想创建一个运行我的 Java 应用程序的 Windows 服务 使用这没有问题 sc exe create myService binPath java jar C to my service jar 当我尝试启动我创建的服务时 我收到以
  • 在引导行右侧悬停时显示删除按钮

    我看到很多在容器上弹出删除按钮的例子 我想在行的右侧显示 Twitter Bootstrap 行 div class row div class col md 4 Content div div class col md 4 Content
  • 谷歌电子表格脚本编辑器:删除项目

    我有两个电子表格脚本项目 一个是用于开发测试的临时测试 我想删除临时的 当我单击脚本编辑器时 它会显示两个项目 我可以选择一个项目 但没有删除选项 此外 当我打开项目本身时 没有删除选项 我看过其他SO线程 例如this https sta
  • 如何修改 WordPress 中的 GET 方法表单提交的 URL 结构?

    使用GET方式提交表单时 如何修改WordPress中的URL结构 目前 当我提交表单时 URL 显示为 http localhost c name1 5paisa name2 zerodha 但我想要这种类型的 URL http loca
  • PyQt5 中的菜单栏()

    我正在尝试将菜单栏加载到我的 gui 上 但我的类对象没有 self menuBar 的属性 有人可以帮助我吗 似乎没有教程提供任何解决办法 class EmailBlast QtWidgets QWidget def init self
  • 在 Meteor 中创建用户时获取客户端的 IP

    我正在 Meteor 中创建自定义登录 注册 因为我需要检查电子邮件格式 更重要的是在注册表单中添加验证码 这需要客户端的 IP 所以我打算验证验证码Accounts validateNewUser 但我不知道如何在这里获取客户端的IP 我
  • 如何运行 @angular-eslint/schematics:convert-tslint-to-eslint

    我正在尝试按照中的说明将 Angular 项目从 TSLint 切换到 ESLintAngular eslint Github 存储库 https github com angular eslint angular eslint I ran
  • JavaScript 在 Firefox 3 中异步加载(根据 Firebug)?

    我正在尝试分析一个网站的性能 我相当有信心该网站由于页面上 JavaScript 文件的加载而减慢了速度 页面上多次包含相同的 JavaScript 文件 并且标签分散在整个页面而不是包含在底部 http developer yahoo c
  • 在 PHP 中删除从字符第一次出现到字符串末尾的所有内容

    我想删除 PHP 中字符串的第一个逗号中的所有内容 包括逗号 例如 print 50 days 7 hours 应该成为 50 days 这是一种方法 print preg replace 1 print Another list prin
  • 什么环境变量设置 Git Color.UI?

    是否有一个 Git 环境变量来规定color ui配置选项 文档中似乎没有 如果有的话 不幸的是 与其他一些设置不同 没有环境变量允许您覆盖color ui配置选项 唯一的方法当然是使用命令行 git config global color
  • 如何将图像“地标”放入 WPF 中的滚动条内?

    我有一个长滚动查看器 我想在滚动条上用小图像标记重要点 如果单击图像 滚动条将跳转到相应的内容 我在一些应用程序 例如 Eclipse 和Chrome http www usabilitypost com 2008 09 19 using