{"record":{"id":"f1d7e43a0d6e1b43","repo":"dotnet/wpf","slug":"sr-annotationservicenotenabled-annotationhelper","errorCode":null,"errorMessage":"SR.AnnotationServiceNotEnabled","messagePattern":"SR\\.AnnotationServiceNotEnabled","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Annotations/AnnotationHelper.cs","lineNumber":1084,"sourceCode":"            }\n\n            annot.Anchors.Clear();\n            annot.Anchors.Add(anchor);\n        }\n\n        /// <summary>\n        ///     Common input checks.  Service must be non-null and enabled.\n        /// </summary>\n        /// <param name=\"service\">service to check</param>\n        /// <exception cref=\"ArgumentNullException\">service is null</exception>\n        /// <exception cref=\"ArgumentException\">service is not enabled</exception>\n        private static void CheckInputs(AnnotationService service)\n        {\n            ArgumentNullException.ThrowIfNull(service);\n\n            if (!service.IsEnabled)\n            {\n                throw new ArgumentException(SR.AnnotationServiceNotEnabled, nameof(service));\n            }\n\n            DocumentViewerBase viewer = service.Root as DocumentViewerBase;\n            if (viewer == null)\n            {\n                FlowDocumentScrollViewer scrollViewer = service.Root as FlowDocumentScrollViewer;\n                FlowDocumentReader reader = service.Root as FlowDocumentReader;\n                Invariant.Assert((scrollViewer != null) || (reader != null), \"Service's Root must be either a FlowDocumentReader, DocumentViewerBase or a FlowDocumentScrollViewer.\");\n            }\n            else\n            {\n                if (viewer.Document == null)\n                {\n                    throw new InvalidOperationException(SR.OnlyFlowFixedSupported);\n                }\n            }\n        }\n","sourceCodeStart":1066,"sourceCodeEnd":1102,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Annotations/AnnotationHelper.cs#L1066-L1102","documentation":"AnnotationHelper.CheckInputs throws ArgumentException when the AnnotationService passed to a helper method (CreateHighlightForSelection, CreateTextStickyNoteForSelection, etc.) has not been enabled. The helper methods require an actively enabled service because they operate on the service's viewer and store. Calling a helper with a service that Enable() was never called on (or after Disable()) produces this error.","triggerScenarios":"Calling any public AnnotationHelper static method (e.g. AnnotationHelper.CreateHighlightForSelection(service, ...)) with an AnnotationService instance whose IsEnabled property is false, i.e. Enable() was never called or Disable() was called beforehand.","commonSituations":"Creating the AnnotationService and immediately calling AnnotationHelper without first calling service.Enable(store); calling helpers after service.Disable(); enabling the service asynchronously and calling a helper before Enable completes; using a different service instance than the one enabled for the viewer.","solutions":["Call service.Enable(annotationStore) on the AnnotationService before invoking any AnnotationHelper method.","Check service.IsEnabled prior to calling the helper and enable it if false.","Ensure you are passing the same AnnotationService instance that was enabled for the viewer, not a newly constructed one.","If the service was disabled (e.g. on page unload), re-enable it before further helper calls."],"exampleFix":"// before\nvar service = new AnnotationService(fdvViewer);\nAnnotationHelper.CreateHighlightForSelection(service, \"me\", \"note\", anchors, rects);\n\n// after\nvar service = new AnnotationService(fdvViewer);\nservice.Enable(new XmlStreamStore(new Uri(\"annotations.xml\")));\nif (service.IsEnabled)\n    AnnotationHelper.CreateHighlightForSelection(service, \"me\", \"note\", anchors, rects);","handlingStrategy":"validation","validationCode":"if (service == null) throw new ArgumentNullException(nameof(service));\nif (!service.IsEnabled)\n    service.Enable(store); // enable before helper calls","typeGuard":"bool CanUseHelpers(AnnotationService s) => s != null && s.IsEnabled;","tryCatchPattern":"try { AnnotationHelper.CreateHighlightForSelection(service, ...); }\ncatch (ArgumentException ex) when (ex.Message.Contains(nameof(service))) { /* enable service and retry */ }","preventionTips":["Always Enable the service immediately after constructing it and before any helper use.","Centralize helper calls behind a helper that checks IsEnabled.","Disable/enable the service symmetrically in navigation lifecycle events."],"tags":["wpf","annotations","invalid-state","argumentexception"],"backgroundTag":"feature-not-enabled","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}