Because of a limitation with the way that the printing works, the PageControl hosting the PageHeaders, PageFooters, and printed grid host do not have automatic access to ancestors.
The PageControl is not hosted in the same container (e.g., Window or Page) that is hosting the DataGridControl. It is in a separate VisualTree at the Application scope; therefore, FindAncestor bindings will not work since the PageControl can only access properties and resources set directly on the Application level (i.e., in the app class or App.xaml).
A workaround that we implemented was to set the PageControl's DataContext to your DataGridControl's DataContext, which means that, if your DataGridControl's DataContext is the instance of the Window hosting it, then the PageControl will be able to access the Window's properties through a relative-source binding. For example:
Binding RelativeSource={RelativeSource AncestorType={x:Type xcdg:PrintVirtualizingStackPanel}}, Path=DataContext....
The FindAncestor binding or ElementName binding still won't work since setting the DataContext does not change the fact that the PageControl is being hosted at the scope of your application and does not have access to the visual tree of your DataGridControl.