自定义scrollviewer模板滚动按钮

时间:2013-11-22 14:00:06

标签: wpf xaml scrollbar scrollviewer

我一直在研究一个问题,我想要一个滚动条,其滚动条被一个按钮向左滚动,一个按钮向右滚动。 (在不同的网格位置分开按钮),但是我一直在努力让我的头围绕它,因为滚动查看器是一个非常复杂的控制。

让我们说我正在为scrollviewer创建一个新的控件模板,我想在模板中添加一个额外的按钮,将内容向右滚动。我如何挂钩移动horizo​​ntalscrollbar的命令。例如,我的代码可能有以下滚动条和按钮,我想挂钩“horizo​​ntalscrollbars”右滚动按钮。

                        <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我无法进行混合。

1 个答案:

答案 0 :(得分:1)

您可能不喜欢这个答案,但您还必须为ControlTemplate元素定义Scrollbar ...这是具有{{1}的元素移动内容的s。您可以在MSDN上的ScrollBar Styles and Templates页面上找到Button的默认ControlTemplate

在该页面上,您会看到一个名为 ScrollBar Parts 的部分。这详细说明了此Scrollbar的命名部分。命名部分是“代码隐藏”访问以提供某些功能的元素。定义新的ControlTemplate时,必须包含这些命名的部分,否则某些(或可能是全部)功能将无法按预期工作。

ControlTemplate中的ButtonScrollBar类型的命名部分。但是,使用此方法,您只能定义自己的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日:对不起,此链接现已损坏......您现在必须购买该书才能看到它。]