Simple ScrollViewer With Offset in DP
if you want a ScollWiever with offsets use
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
public class ScrollViewerEx : ScrollViewer, INotifyPropertyChanged { static ScrollViewerEx() { //ScrollViewer.VerticalOffsetProperty.OverrideMetadata(typeof(ScrollViewerEx), // new FrameworkPropertyMetadata(0.0, (d, e) => // { // ScrollViewerEx control = d as ScrollViewerEx; // control.ScrollToVerticalOffset((double)e.NewValue); // })); //ScrollViewer.HorizontalOffsetProperty.OverrideMetadata(typeof(ScrollViewerEx), // new FrameworkPropertyMetadata(0.0, (d, e) => // { // ScrollViewerEx control = d as ScrollViewerEx; // control.ScrollToHorizontalOffset((double)e.NewValue); // })); } #region VerticalOffset (DP) public new double VerticalOffset { get { return (double)GetValue(VerticalOffsetProperty); } set { SetValue(VerticalOffsetProperty, value); } } // Using a DependencyProperty as the backing store for VerticalOffset. This enables animation, styling, binding, etc... public new static readonly DependencyProperty VerticalOffsetProperty = DependencyProperty.Register( "VerticalOffset", typeof(double), typeof(ScrollViewerEx), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender , new PropertyChangedCallback(VerticalOffsetChanged)) ); private static void VerticalOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ScrollViewerEx control = d as ScrollViewerEx; control.ScrollToVerticalOffset((double)e.NewValue); } #endregion #region HorizontalOffset (DP) public new double HorizontalOffset { get { return (double)GetValue(HorizontalOffsetProperty); } set { SetValue(HorizontalOffsetProperty, value); } } // Using a DependencyProperty as the backing store for HorizontalOffset. This enables animation, styling, binding, etc... public static new readonly DependencyProperty HorizontalOffsetProperty = DependencyProperty.Register( "HorizontalOffset", typeof(double), typeof(ScrollViewerEx), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender , new PropertyChangedCallback(HorizontalOffsetChanged)) ); private static void HorizontalOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ScrollViewerEx control = d as ScrollViewerEx; control.ScrollToHorizontalOffset((double)e.NewValue); } #endregion protected override void OnPreviewMouseWheel(MouseWheelEventArgs e) { e.Handled = true; base.OnPreviewMouseWheel(e); } ScrollBar verticalScrollBar = null; ScrollBar horizontalScrollBar = null; public event PropertyChangedEventHandler PropertyChanged; public override void OnApplyTemplate() { base.OnApplyTemplate(); verticalScrollBar = GetTemplateChild("PART_VerticalScrollBar") as ScrollBar; horizontalScrollBar = GetTemplateChild("PART_VerticalScrollBar") as ScrollBar; this.Loaded += (ss, ee) => { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("VerticalMaximum")); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("HorizontalMaximum")); }; } public double? VerticalMaximum => verticalScrollBar?.Maximum; public double? HorizontalMaximum => horizontalScrollBar?.Maximum; } |
and you can animate then with
1 2 3 4 5 6 7 8 9 |
<Storyboard x:Key="Storyboard1"> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(local:ScrollViewerEx.VerticalOffset)" Storyboard.TargetName="scrollViewerEx"> <EasingDoubleKeyFrame KeyTime="0" Value="0" /> <EasingDoubleKeyFrame KeyTime="0:0:20" Value="{Binding VerticalMaximum, ElementName=scrollViewerEx}" /> </DoubleAnimationUsingKeyFrames> </Storyboard> |
and for sample
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<local:ScrollViewerEx x:Name="scrollViewerEx" HorizontalAlignment="Left" Height="195" Margin="830,40,0,0" VerticalAlignment="Top" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" Width="245"> <TextBlock Margin="0 0 0 0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text=" " /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbb" /><LineBreak /> <Run Text="aaaaaaaaaaaaaaaaaaaa" /><LineBreak /> <Run Text="ccccccccccccc" /><LineBreak /> <Run Text="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" /><LineBreak /><Run Text="cccccccccccccccccccc" /><LineBreak /><Run Text="dddddddddddddddddddddd" /><LineBreak /><Run Text="eeeeeeeeeeeeeeeeeeeeeee" /><LineBreak /><Run Text="fffffffffffffffffffffffff" /><LineBreak /><Run Text="ggggggggggggggggggggggg" /><LineBreak /><Run Text="hhhhhhhhhhhhhhhhhhhh" /><LineBreak /><Run Text="iiiiiiiiiiiiiiiiiiiiiiiiiiiii" /><LineBreak /><Run Text="jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj" /><LineBreak /><Run Text="kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" /><LineBreak /><Run Text="lllllllllllllllllllllllllllllllllllllllllllllllllllll" /><LineBreak /><Run Text="mmmmmmmmmmmmmmmmmmmmmmmmmm" /><LineBreak /><Run Text="nnnnnnnnnnnnnnnnnnnnnn" /><LineBreak /><Run Text="oooooooooooooooooooooo" /><LineBreak /><Run Text="pppppppppppppppppppppppppp" /><LineBreak /><Run Text="qqqqqqqqqqqqqqqqqqqq" /><LineBreak /><Run Text="rrrrrrrrrrrrrrrrrrrrrrrrr" /> <LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /><LineBreak /> </TextBlock> </local:ScrollViewerEx> |
Categories: Non classé
Commentaires récents