@@ -30,17 +30,17 @@ public abstract class HeaderBehaviorBase : BehaviorBase<FrameworkElement>
3030 /// <remarks>
3131 /// Set this using the header of a ListView or GridView.
3232 /// </remarks>
33- public UIElement HeaderElement
33+ public FrameworkElement HeaderElement
3434 {
35- get { return ( UIElement ) GetValue ( HeaderElementProperty ) ; }
35+ get { return ( FrameworkElement ) GetValue ( HeaderElementProperty ) ; }
3636 set { SetValue ( HeaderElementProperty , value ) ; }
3737 }
3838
3939 /// <summary>
4040 /// Defines the Dependency Property for the <see cref="HeaderElement"/> property.
4141 /// </summary>
4242 public static readonly DependencyProperty HeaderElementProperty = DependencyProperty . Register (
43- nameof ( HeaderElement ) , typeof ( UIElement ) , typeof ( HeaderBehaviorBase ) , new PropertyMetadata ( null , PropertyChangedCallback ) ) ;
43+ nameof ( HeaderElement ) , typeof ( FrameworkElement ) , typeof ( HeaderBehaviorBase ) , new PropertyMetadata ( null , PropertyChangedCallback ) ) ;
4444
4545 /// <summary>
4646 /// If any of the properties are changed then the animation is automatically started.
@@ -127,18 +127,17 @@ protected virtual bool AssignAnimation()
127127 // Implicit operation: Find the Header object of the control if it uses ListViewBase
128128 if ( HeaderElement == null && listView != null )
129129 {
130- HeaderElement = ( listView . Header as UIElement ) ! ;
130+ HeaderElement = ( listView . Header as FrameworkElement ) ! ;
131131 }
132132
133- var headerElement = HeaderElement as FrameworkElement ;
134- if ( headerElement == null || headerElement . RenderSize . Height == 0 )
133+ if ( HeaderElement == null || HeaderElement . RenderSize . Height == 0 )
135134 {
136135 return false ;
137136 }
138137
139138 if ( _headerVisual == null )
140139 {
141- _headerVisual = ElementCompositionPreview . GetElementVisual ( headerElement ) ;
140+ _headerVisual = ElementCompositionPreview . GetElementVisual ( HeaderElement ) ;
142141 }
143142
144143 if ( _headerVisual == null )
@@ -147,8 +146,8 @@ protected virtual bool AssignAnimation()
147146 }
148147
149148 // TODO: Not sure if we need to provide an option to turn these events off, as FadeHeaderBehavior didn't use these two, unlike QuickReturn/Sticky did...
150- headerElement . SizeChanged -= ScrollHeader_SizeChanged ;
151- headerElement . SizeChanged += ScrollHeader_SizeChanged ;
149+ HeaderElement . SizeChanged -= ScrollHeader_SizeChanged ;
150+ HeaderElement . SizeChanged += ScrollHeader_SizeChanged ;
152151
153152 _scrollViewer . GotFocus -= ScrollViewer_GotFocus ;
154153 _scrollViewer . GotFocus += ScrollViewer_GotFocus ;
@@ -178,9 +177,9 @@ protected virtual void RemoveAnimation()
178177 _scrollViewer . GotFocus -= ScrollViewer_GotFocus ;
179178 }
180179
181- if ( HeaderElement is FrameworkElement element )
180+ if ( HeaderElement != null )
182181 {
183- element . SizeChanged -= ScrollHeader_SizeChanged ;
182+ HeaderElement . SizeChanged -= ScrollHeader_SizeChanged ;
184183 }
185184
186185 StopAnimation ( ) ;
@@ -209,13 +208,11 @@ private void ScrollViewer_GotFocus(object sender, RoutedEventArgs e)
209208 // Popups have no parents, whereas a normal Item would have the ListView as a parent.
210209 if ( focusedElement is UIElement element && VisualTreeHelper . GetParent ( element ) != null )
211210 {
212- FrameworkElement header = ( FrameworkElement ) HeaderElement ;
213-
214211 var point = element . TransformToVisual ( scroller ) . TransformPoint ( new Point ( 0 , 0 ) ) ;
215212
216- if ( point . Y < header . ActualHeight )
213+ if ( point . Y < HeaderElement . ActualHeight )
217214 {
218- scroller . ChangeView ( 0 , scroller . VerticalOffset - ( header . ActualHeight - point . Y ) , 1 , false ) ;
215+ scroller . ChangeView ( 0 , scroller . VerticalOffset - ( HeaderElement . ActualHeight - point . Y ) , 1 , false ) ;
219216 }
220217 }
221218 }
0 commit comments