code_junkie

Silverlight Scrollviewer With Only Buttons

Nov 13th, 2011
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.87 KB | None | 0 0
  1. ------------------------------------------------------
  2. | | | |
  3. | < | Content Here | > |
  4. | | | |
  5. ------------------------------------------------------
  6.  
  7. <Canvas x:Name="root">
  8. <Button x:Name="left" Content="<"/>
  9. <Button x:Name="right" Content=">"/>
  10. <ScrollViewer x:Name="viewer" BorderThickness="0" VerticalScrollBarVisibility="Hidden">
  11. <ContentPresenter />
  12. </ScrollViewer>
  13. </Canvas>
  14.  
  15. public override void OnApplyTemplate()
  16. {
  17. base.OnApplyTemplate();
  18.  
  19. left = GetTemplateChild("left") as Button;
  20. left.Click += new RoutedEvent(YourHandler);
  21. right = GetTemplateChild("right") as Button;
  22. right.Click += new RoutedEvent(YourHandler);
  23. // position your scroll buttons here, not writing that code
  24. scroll = GetTemplateChild("viewer") as ScrollViewer;
  25. root = GetTemplateChild("root") as Canvas;
  26.  
  27. var fe = this.Content as FrameworkElement;
  28. if (fe != null)
  29. {
  30. fe.SizeChanged += new SizeChangedEventHandler(fe_SizeChanged);
  31. }
  32. }
  33.  
  34. void fe_SizeChanged(object sender, SizeChangedEventArgs e)
  35. {
  36. this.InvalidateMeasure();
  37. }
  38.  
  39. protected override Size ArrangeOverride(Size finalSize)
  40. {
  41. if (!double.IsInfinity(scroll.ViewportHeight))
  42. {
  43. left.Visibility = (scroll.HorizontalOffset > 0);
  44. right.Visibility = (scroll.HorizontalOffset < ScrollableHeight);
  45. }
  46. return base.ArrangeOverride(finalSize);
  47. }
  48.  
  49. protected override Size MeasureOverride(Size availableSize)
  50. {
  51. scroll.Measure(availableSize);
  52. return scroll.DesiredSize;
  53. }
  54.  
  55. <ControlTemplate TargetType="{x:Type ScrollViewer}" x:Key="ButtonOnlyScrollViewer">
  56. <ControlTemplate.Resources>
  57. <!-- Add style here for repeat button seen below -->
  58. </ControlTemplate.Resources>
  59. <Grid>
  60. <Grid.RowDefinitions>
  61. <RowDefinition Height="Auto"/>
  62. <RowDefinition Height="*"/>
  63. <RowDefinition Height="Auto"/>
  64. </Grid.RowDefinitions>
  65.  
  66. <RepeatButton Grid.Row="0"
  67. Foreground="White"
  68. Background="Yellow"
  69. HorizontalAlignment="Stretch"
  70. Command="ScrollBar.PageUpCommand"
  71. Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}">
  72. </RepeatButton>
  73.  
  74. <ScrollContentPresenter
  75. CanContentScroll="{TemplateBinding CanContentScroll}"
  76. Grid.Row="1"
  77. Content="{TemplateBinding Content}"
  78. Width="{TemplateBinding Width}"
  79. Height="{TemplateBinding Height}"
  80. Margin="{TemplateBinding Margin}"/>
  81.  
  82. <RepeatButton Grid.Row="2" Background="Black" Foreground="White" Command="ScrollBar.PageDownCommand">
  83. </RepeatButton>
  84. </Grid>
  85. </ControlTemplate>
Add Comment
Please, Sign In to add comment