2013-11-22 95 views
0

我一直在处理一个问题,我想要一个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

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

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

ScrollBar中的ButtonRepeatButton类型的命名部件。但是,使用这种方法,您将只能定义这些RepeatButton的自己的版本,而不会添加其他版本。实际移动内容的功能来自IScrollInfo interface,并且没有被ScrollBar控件公开,因此您无法为其添加额外的Button点击。

失败了,替代方案甚至更长...您需要定义您自己的自定义滚动面板,实现IScrollInfo界面。在这一过程中,您可以提供自己的自定义滚动功能,并安排好一切正是你想要的方式:

<ScrollViewer CanContentScroll=”True”> 
    <YourXmlNamespacePrefix:YourCustomPanel> 
     <!--Your Content--> 
    </YourXmlNamespacePrefix:YourCustomPanel> 
</ScrollViewer> 

此操作在WPF控件开发偷跑书的第七章精美解释......你可以在线查找PDF副本http://www.adorkable.us/books/wpf_control_development.pdf。这很值得一看。

[更新27/11/2014:对不起,这个链接现在是打破......你必须买本书看看现在]

+0

谢谢,生病可能再往定义的路径滚动条元素。我想知道如何去分开两个按钮,但我想我必须为每个按钮的滚动条制作两个单独的模板... – CreativeAbyss

+0

是的,如果你看第一个链接页面,你会看到许多已为'ScrollBar'的各个部分定义的ControlTemplate。 – Sheridan