Пример #1
0
        public ElementRenderer GetRenderer(UIElement element)
        {
            var elementRenderer = element.ElementRenderer;

            if (elementRenderer == null)
            {
                // try to get the renderer from the user registered class factory
                var currentType = element.GetType();
                while (elementRenderer == null && currentType != null)
                {
                    if (typesToUserFactories.ContainsKey(currentType))
                    {
                        elementRenderer = typesToUserFactories[currentType].TryCreateRenderer(element);
                    }

                    currentType = currentType.GetTypeInfo().BaseType;
                }

                // try to get the renderer from the default renderer factory.
                if (elementRenderer == null && defaultFactory != null)
                {
                    elementRenderer = defaultFactory.TryCreateRenderer(element);
                }

                if (elementRenderer == null)
                {
                    throw new InvalidOperationException(string.Format("No renderer found for element {0}", element));
                }

                // cache the renderer for future uses.
                element.ElementRenderer = elementRenderer;
            }

            return(elementRenderer);
        }
Пример #2
0
        public ElementRenderer GetRenderer(UIElement element)
        {
            ElementRenderer elementRenderer;

            elementIdToRenderer.TryGetValue(element.Id, out elementRenderer);
            if (elementRenderer == null)
            {
                // try to get the renderer from the user registered class factory
                var currentType = element.GetType();
                while (elementRenderer == null && currentType != null)
                {
                    if (typesToUserFactories.TryGetValue(currentType, out var rendererFactory))
                    {
                        elementRenderer = rendererFactory.TryCreateRenderer(element);
                    }

                    currentType = currentType.GetTypeInfo().BaseType;
                }

                // try to get the renderer from the default renderer factory.
                if (elementRenderer == null && defaultFactory != null)
                {
                    elementRenderer = defaultFactory.TryCreateRenderer(element);
                }

                if (elementRenderer == null)
                {
                    throw new InvalidOperationException($"No renderer found for element {element}");
                }

                // cache the renderer for future uses.
                elementIdToRenderer[element.Id] = elementRenderer;
            }

            return(elementRenderer);
        }