2013-11-22 128 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