public virtual IElementSelector CreateOwnSelector(string state) { if (this.UserSelector != null) { return(this.UserSelector); } if (this.stateManager == null) { return(CreateDefaultSelector(this)); } IElementSelector result; if (string.IsNullOrEmpty(state)) { StateDescriptionNode descr = this.stateManager.GetAvailableStates(this.itemThemeRole); result = new VisualStateSelector(descr.StateName); } else { bool verified = this.stateManager.VerifyState(this.itemThemeRole, state); Debug.Assert(verified, string.Format("State '{1}' on item with theme role '{0}' not valid for the specified StateManager: {2}", this.itemThemeRole, state, this.stateManager)); result = new VisualStateSelector(state); } return(result); }
protected override int GetKey() { if (!string.IsNullOrEmpty(this.visualState)) { return(VisualStateSelector.GetSelectorKey(this.visualState)); } return(0); }
public override bool Equals(IElementSelector elementSelector) { VisualStateSelector visualStateSelector = elementSelector as VisualStateSelector; if (visualStateSelector != null) { return(visualStateSelector.visualState == this.visualState); } return(false); }
private static IStyleSelector GetClassStyleSelector(String currentToken) { var colonIndex = currentToken.IndexOf(':'); if (colonIndex == -1) { return(new ClassStyleSelector(currentToken)); } var className = currentToken.Substring(0, colonIndex); var classSelector = new ClassStyleSelector(className); var stateType = GetStateType(currentToken, colonIndex); var visualStateSelector = new VisualStateSelector(classSelector, stateType); return(visualStateSelector); }
private void RegisterItemStateFromVisualStateSelector(VisualStateSelector selector) { string[] splittedState = selector.VisualState.Split('.'); Debug.Assert(splittedState != null && splittedState.Length > 0, "Invalid visual state name!"); string themeRole = splittedState[0]; string stateName = this.GetStateFromVisualStateSelector(selector.VisualState); //This should happen only for the default state. if (string.IsNullOrEmpty(stateName)) { return; } try { this.TryAddItemMetadataState(this, themeRole, stateName); } catch (Exception) { } }
private void GetSelectorParts(IMarkupNode cssNode, out List <IStyleSelector> currentAndSelectors, out List <Combinator> combinators) { currentAndSelectors = new List <IStyleSelector>(); combinators = new List <Combinator>(); var name = cssNode.Name; if (name == "*") { currentAndSelectors.Add(AllStyleSelector.Instance); return; } var tokens = name.Split(); for (var c = 0; c < tokens.Length; c++) { var currentToken = tokens[c]; if (currentToken.Length == 0) { continue; } switch (currentToken[0]) { case '.': { var classSelector = GetClassStyleSelector(currentToken); currentAndSelectors.Add(classSelector); break; } case '>': currentAndSelectors.Add(new CombinatorSelector(Combinator.Child)); break; case '+': currentAndSelectors.Add(new CombinatorSelector(Combinator.AdjacentSibling)); break; case '~': currentAndSelectors.Add(new CombinatorSelector(Combinator.AdjacentSibling)); break; case '|': if (currentToken[1] == '|') { currentAndSelectors.Add(new CombinatorSelector(Combinator.Column)); } break; case ' ': currentAndSelectors.Add(new CombinatorSelector(Combinator.Descendant)); break; default: var colonIndex = currentToken.IndexOf(':'); if (colonIndex > 0) { var visualName = currentToken.Substring(0, colonIndex); var typeSelector = GetVisualTypeSelector(visualName); if (currentToken.Length > colonIndex + 1 && currentToken[colonIndex + 1] == ':') { // span::before var appenderName = currentToken.Substring(colonIndex + 2); var appendSelector = GetContentAppender(typeSelector, appenderName); currentAndSelectors.Add(appendSelector); break; } // PSEUDO // input:checked var stateType = GetStateType(currentToken, colonIndex); var visualStateSelector = new VisualStateSelector(typeSelector, stateType); currentAndSelectors.Add(visualStateSelector); } else { var visualTypeSelector = GetVisualTypeSelector(currentToken); currentAndSelectors.Add(visualTypeSelector); } break; } } }