我一直在研究一个问题,我想要一个滚动条,其滚动条被一个按钮向左滚动,一个按钮向右滚动。 (在不同的网格位置分开按钮),但是我一直在努力让我的头围绕它,因为滚动查看器是一个非常复杂的控制。
让我们说我正在为scrollviewer创建一个新的控件模板,我想在模板中添加一个额外的按钮,将内容向右滚动。我如何挂钩移动horizontalscrollbar的命令。例如,我的代码可能有以下滚动条和按钮,我想挂钩“horizontalscrollbars”右滚动按钮。
<ScrollBar x:Name="HorizontalScrollBar"
Grid.Column="0"
IsTabStop="False"
Maximum="{TemplateBinding ScrollableWidth}"
Margin="0,0,0,0"
Minimum="0"
Orientation="Horizontal"
Grid.Row="0"
Visibility="Collapsed"
Value="{TemplateBinding HorizontalOffset}"
ViewportSize="{TemplateBinding ViewportWidth}"
/>
<Button Grid.Column="0"
x:Name="LeftBtnScroll">
</Button>
<Button Grid.Column="2"
x:Name="RightBtnScroll">
</Button>
p.s我无法进行混合。
答案 0 :(得分:1)
您可能不喜欢这个答案,但您还必须为ControlTemplate
元素定义Scrollbar
...这是具有{{1}的元素移动内容的s。您可以在MSDN上的ScrollBar Styles and Templates页面上找到Button
的默认ControlTemplate
。
在该页面上,您会看到一个名为 ScrollBar Parts 的部分。这详细说明了此Scrollbar
的命名部分。命名部分是“代码隐藏”访问以提供某些功能的元素。定义新的ControlTemplate
时,必须包含这些命名的部分,否则某些(或可能是全部)功能将无法按预期工作。
ControlTemplate
中的Button
是ScrollBar
类型的命名部分。但是,使用此方法,您只能定义自己的RepeatButton
版本,而不能添加其他版本。实际移动内容的功能来自IScrollInfo
interface,而RepeatButton
控件尚未公开,因此您无法为其添加ScrollBar
次点击。
如果失败,替代方案会更长......你需要定义自己的自定义滚动面板来实现Button
接口。在此过程中,您可以提供自己的自定义滚动功能,并按照您想要的方式排列所有内容:
IScrollInfo
在WPF Control Development Unleashed书的第7章中详细解释了这个操作......您可以在http://www.adorkable.us/books/wpf_control_development.pdf在线找到PDF副本。值得一看。
[更新日期2014年11月27日:对不起,此链接现已损坏......您现在必须购买该书才能看到它。]