// Fill necessary properties in floating header
        private void UpdateFloatingHeader(GridViewColumnHeader srcHeader)
        {
            Debug.Assert(srcHeader != null, "srcHeader is null");
            Debug.Assert(_floatingHeader != null, "floating header is null");

            _floatingHeader.Style = srcHeader.Style;

            _floatingHeader.FloatSourceHeader = srcHeader;
            _floatingHeader.Width = srcHeader.ActualWidth;
            _floatingHeader.Height = srcHeader.ActualHeight;
            _floatingHeader.SetValue(GridViewColumnHeader.ColumnPropertyKey, srcHeader.Column);
            _floatingHeader.Visibility = Visibility.Hidden;

            // override floating header's MinWidth/MinHeight to disable users to change floating header's Width/Height
            _floatingHeader.MinWidth = srcHeader.MinWidth;
            _floatingHeader.MinHeight = srcHeader.MinHeight;

            object template = srcHeader.ReadLocalValue(GridViewColumnHeader.ContentTemplateProperty);
            if ((template != DependencyProperty.UnsetValue) && (template != null))
            {
                _floatingHeader.ContentTemplate = srcHeader.ContentTemplate;
            }

            object selector = srcHeader.ReadLocalValue(GridViewColumnHeader.ContentTemplateSelectorProperty);
            if ((selector != DependencyProperty.UnsetValue) && (selector != null))
            {
                _floatingHeader.ContentTemplateSelector = srcHeader.ContentTemplateSelector;
            }

            if (!(srcHeader.Content is Visual))
            {
                _floatingHeader.Content = srcHeader.Content;
            }
        }