@@ -332,31 +332,43 @@ private void OnContentPointerWheelChanged(object sender, PointerWheelEventArgs e
332332 return ;
333333
334334 var scroller = grid . FindDescendantOfType < ScrollBar > ( ) ;
335- if ( scroller == null )
335+ if ( scroller == null || ! scroller . IsVisible )
336336 return ;
337337
338338 scroller . Value -= e . Delta . Y * HexViewer . LINE_HEIGHT ;
339339 }
340340
341- private void OnScrollBarValueChanged ( object sender , RangeBaseValueChangedEventArgs e )
341+ private void OnContentSizeChanged ( object sender , SizeChangedEventArgs e )
342342 {
343- if ( sender is ScrollBar scroller )
343+ if ( sender is not Grid { DataContext : Models . BinaryFile file } grid )
344+ return ;
345+
346+ var scroller = grid . FindDescendantOfType < ScrollBar > ( ) ;
347+ if ( scroller == null )
348+ return ;
349+
350+ var viewport = grid . Bounds . Height - HexViewer . HEADER_HEIGHT ;
351+ var max = Math . Ceiling ( file . Size * 1.0 / HexViewer . BYTES_PER_LINE ) * HexViewer . LINE_HEIGHT - viewport ;
352+
353+ if ( max <= 0 )
344354 {
345- var viewer = this . FindDescendantOfType < HexViewer > ( ) ;
346- if ( viewer != null )
347- viewer . Offset = ( long ) ( Math . Ceiling ( scroller . Value / HexViewer . LINE_HEIGHT ) * HexViewer . BYTES_PER_LINE ) ;
355+ scroller . IsVisible = false ;
356+ }
357+ else
358+ {
359+ scroller . IsVisible = true ;
360+ scroller . ViewportSize = viewport ;
361+ scroller . Maximum = max ;
348362 }
349363 }
350364
351- private void OnScrollBarSizeChanged ( object sender , SizeChangedEventArgs e )
365+ private void OnScrollBarValueChanged ( object sender , RangeBaseValueChangedEventArgs e )
352366 {
353- if ( sender is ScrollBar { DataContext : Models . BinaryFile file } scroller )
367+ if ( sender is ScrollBar scroller )
354368 {
355- var viewport = scroller . Bounds . Height ;
356- var max = Math . Ceiling ( file . Size / ( double ) HexViewer . BYTES_PER_LINE ) * HexViewer . LINE_HEIGHT - viewport ;
357-
358- scroller . ViewportSize = viewport ;
359- scroller . Maximum = Math . Max ( viewport , max ) ;
369+ var viewer = this . FindDescendantOfType < HexViewer > ( ) ;
370+ if ( viewer != null )
371+ viewer . Offset = ( long ) ( Math . Ceiling ( scroller . Value / HexViewer . LINE_HEIGHT ) * HexViewer . BYTES_PER_LINE ) ;
360372 }
361373 }
362374
@@ -383,11 +395,11 @@ private void OnGotoAddressTextChanged(object sender, TextChangedEventArgs e)
383395 return ;
384396
385397 var scroller = ContentPanel . FindDescendantOfType < ScrollBar > ( ) ;
386- if ( scroller == null )
387- return ;
388-
389- var offset = Math . Floor ( idx / ( double ) HexViewer . BYTES_PER_LINE ) * HexViewer . LINE_HEIGHT - ( scroller . ViewportSize * 0.5 ) ;
390- scroller . Value = Math . Max ( 0 , offset ) ;
398+ if ( scroller is { IsVisible : true } )
399+ {
400+ var offset = Math . Floor ( idx * 1.0 / HexViewer . BYTES_PER_LINE ) * HexViewer . LINE_HEIGHT - ( scroller . ViewportSize * 0.5 ) ;
401+ scroller . Value = Math . Max ( 0 , offset ) ;
402+ }
391403
392404 var viewer = this . FindDescendantOfType < HexViewer > ( false ) ;
393405 viewer ? . SetHighlightedIndex ( idx ) ;
0 commit comments