{"record":{"id":"fd1a27a569e2ec78","repo":"AvaloniaUI/Avalonia","slug":"descendant-selector-must-be-preceded-by-a-selector","errorCode":null,"errorMessage":"Descendant selector must be preceded by a selector.","messagePattern":"Descendant selector must be preceded by a selector\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Avalonia.Base/Styling/DescendentSelector.cs","lineNumber":16,"sourceCode":"using System;\nusing Avalonia.LogicalTree;\nusing Avalonia.Styling.Activators;\n\n#nullable enable\n\nnamespace Avalonia.Styling\n{\n    internal class DescendantSelector : Selector\n    {\n        private readonly Selector _parent;\n        private string? _selectorString;\n\n        public DescendantSelector(Selector? parent)\n        {\n            _parent = parent ?? throw new InvalidOperationException(\"Descendant selector must be preceded by a selector.\");\n        }\n\n        /// <inheritdoc/>\n        internal override bool IsCombinator => true;\n\n        /// <inheritdoc/>\n        internal override bool InTemplate => _parent.InTemplate;\n\n        /// <inheritdoc/>\n        internal override Type? TargetType => null;\n\n        public override string ToString(Style? owner)\n        {\n            if (_selectorString == null)\n            {\n                _selectorString = _parent.ToString(owner, true) + ' ';\n            }\n","sourceCodeStart":1,"sourceCodeEnd":34,"githubUrl":"https://github.com/AvaloniaUI/Avalonia/blob/11c542726898ae954a1ef668c65ec79ec92ab17d/src/Avalonia.Base/Styling/DescendentSelector.cs#L1-L34","documentation":"Error \"Descendant selector must be preceded by a selector.\" thrown in AvaloniaUI/Avalonia.","triggerScenarios":"Raised when a descendant selector (whitespace combinator) appears without a preceding selector in a style selector string. Defend by ensuring selector strings start with a type or name selector before any descendant combinator.","commonSituations":"See trigger scenarios.","solutions":["Ensure the selector string has a selector before the descendant combinator (a space); e.g. 'Button TextBlock' instead of starting with a space.","Fix programmatically built selectors so a DescendentSelector is always constructed with a preceding selector."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"11c542726898ae954a1ef668c65ec79ec92ab17d","analyzedAt":"2026-08-13T11:57:40.261Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}