Beispiel #1
0
        public static Selector Descendent(this Selector previous)
        {
            return(new Selector(previous, stopTraversal: true)
            {
                SelectorString = " ",
                GetObservable = control =>
                {
                    // TODO: This needs to traverse the logical tree, not the visual.
                    IVisual c = (IVisual)control;
                    List <IObservable <bool> > descendentMatches = new List <IObservable <bool> >();

                    while (c != null)
                    {
                        c = c.VisualParent;

                        if (c is IStyleable)
                        {
                            descendentMatches.Add(previous.GetActivator((IStyleable)c));
                        }
                    }

                    return new StyleActivator(
                        descendentMatches,
                        ActivatorMode.Or);
                },
            });
        }
Beispiel #2
0
        public static Selector Template(this Selector previous)
        {
            Contract.Requires <ArgumentNullException>(previous != null);

            return(new Selector(previous, stopTraversal: true)
            {
                GetObservable = control =>
                {
                    IStyleable templatedParent = control.TemplatedParent as IStyleable;
                    return templatedParent != null?
                    previous.GetActivator(templatedParent) :
                        Observable.Return(true);
                },
                InTemplate = true,
                SelectorString = " $ ",
            });
        }