/// <summary>
        /// Handles a change to the IsLayoutFrozen property.
        /// </summary>
        /// <param name="dependencyObject">The object that owns the property.</param>
        /// <param name="dependencyPropertyChangedEventArgs">A description of the changed property.</param>
        private static void OnIsLayoutFrozenChanged(DependencyObject dependencyObject,
                                                    DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            // Extract the strongly typed variables from the generic parameters.
            ViewerBlotter viewerPrototype = dependencyObject as ViewerBlotter;
            Boolean       isLayoutFrozen  = (Boolean)dependencyPropertyChangedEventArgs.NewValue;

            // This takes care of the actual work of setting the filter to display only the filled orders (or removing the filter).
            ViewerBlotter.reportWorkingOrder.IsLayoutFrozen = isLayoutFrozen;
        }
        /// <summary>
        /// Handles a change to the Scale property.
        /// </summary>
        /// <param name="dependencyObject">The object that owns the property.</param>
        /// <param name="dependencyPropertyChangedEventArgs">A description of the changed property.</param>
        private static void OnScaleChanged(
            DependencyObject dependencyObject,
            DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            // Extract the strongly typed variables from the generic parameters.
            ViewerBlotter viewerPrototype = dependencyObject as ViewerBlotter;
            Double        scale           = (Double)dependencyPropertyChangedEventArgs.NewValue;

            // Set the animation speed on the report.
            ViewerBlotter.reportWorkingOrder.Scale = scale;
            ViewerBlotter.reportMatch.Scale        = scale;
            ViewerBlotter.reportExecution.Scale    = scale;
        }
        /// <summary>
        /// Handles a change to the IsNavigationPaneVisible property.
        /// </summary>
        /// <param name="dependencyObject">The object that owns the property.</param>
        /// <param name="dependencyPropertyChangedEventArgs">A description of the changed property.</param>
        private static void OnIsNavigationPaneVisibleChanged(DependencyObject dependencyObject,
                                                             DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            // Extract the strongly typed variables from the generic parameters.
            ViewerBlotter viewerPrototype         = dependencyObject as ViewerBlotter;
            Boolean       isNavigationPaneVisible = (Boolean)dependencyPropertyChangedEventArgs.NewValue;

            // The real logic is handled by the application window.  This handler is only got to update the menu user interface to
            // reflect the state of the navigation pane.
            if (viewerPrototype.menuItemIsNavigationPaneVisible.IsChecked != isNavigationPaneVisible)
            {
                viewerPrototype.menuItemIsNavigationPaneVisible.IsChecked = isNavigationPaneVisible;
            }
        }
        /// <summary>
        /// Handles a change to the AnimationSpeed property.
        /// </summary>
        /// <param name="dependencyObject">The object that owns the property.</param>
        /// <param name="dependencyPropertyChangedEventArgs">A description of the changed property.</param>
        private static void OnAnimationSpeedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            // Extract the strongly typed variables from the generic parameters.
            ViewerBlotter  viewerPrototype = dependencyObject as ViewerBlotter;
            AnimationSpeed animationSpeed  = (AnimationSpeed)dependencyPropertyChangedEventArgs.NewValue;

            // Set the animation speed on the report.
            ViewerBlotter.reportWorkingOrder.AnimationSpeed = animationSpeed;

            // Adjust the menu items for the new animation setting.
            viewerPrototype.menuItemSetAnimationFast.IsChecked   = animationSpeed == AnimationSpeed.Fast;
            viewerPrototype.menuItemSetAnimationMedium.IsChecked = animationSpeed == AnimationSpeed.Medium;
            viewerPrototype.menuItemSetAnimationOff.IsChecked    = animationSpeed == AnimationSpeed.Off;
            viewerPrototype.menuItemSetAnimationSlow.IsChecked   = animationSpeed == AnimationSpeed.Slow;
        }
        /// <summary>
        /// Handles a change to the IsHeaderFrozen property.
        /// </summary>
        /// <param name="dependencyObject">The object that owns the property.</param>
        /// <param name="dependencyPropertyChangedEventArgs">A description of the changed property.</param>
        private static void OnIsHeaderFrozenChanged(DependencyObject dependencyObject,
                                                    DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
        {
            // Extract the strongly typed variables from the generic parameters.
            ViewerBlotter viewerPrototype = dependencyObject as ViewerBlotter;
            Boolean       isHeaderFrozen  = (Boolean)dependencyPropertyChangedEventArgs.NewValue;

            // This takes care of the actual work of setting the filter to display only the filled orders (or removing the filter).
            ViewerBlotter.reportWorkingOrder.IsHeaderFrozen = isHeaderFrozen;
            ViewerBlotter.reportMatch.IsHeaderFrozen        = isHeaderFrozen;
            ViewerBlotter.reportExecution.IsHeaderFrozen    = isHeaderFrozen;

            // The user interface is modified here to reflect the change to the property.
            if (viewerPrototype.toggleButtonIsHeaderFrozen.IsChecked != isHeaderFrozen)
            {
                viewerPrototype.toggleButtonIsHeaderFrozen.IsChecked = isHeaderFrozen;
            }
        }