예제 #1
0
        public IVisualRenderElement GetRenderElement(IRenderElementFactory factory)
        {
            if (visualRenderElement == null)
            {
                renderElementFactory = factory;
                visualRenderElement  = factory.CreateVisualRenderElement(this);

                visualRenderElement.Background       = VisualBackground;
                visualRenderElement.Bounds           = VisualBounds;
                visualRenderElement.Clip             = VisualClip;
                visualRenderElement.ClipToBounds     = VisualClipToBounds;
                visualRenderElement.IsHitTestVisible = VisualIsHitTestVisible;
                visualRenderElement.IsVisible        = VisualIsVisible;
                visualRenderElement.Opacity          = VisualOpacity;
                visualRenderElement.Transform        = VisualTransform;

                object content = CreateRenderElementContentOverride(factory);

                if (content != null)
                {
                    renderChildrenOffset = 1;
                    visualRenderElement.InsertChild(0, content);
                }

                int index = 0;
                foreach (Visual child in VisualChildren)
                {
                    child.GetRenderElement(factory);
                    visualRenderElement.InsertChild(renderChildrenOffset + index, child.GetRenderElement(factory));
                    index++;
                }
            }

            return(visualRenderElement);
        }
예제 #2
0
        private IVisualRenderElement CreateRenderElement(IRenderElementFactory factory)
        {
            IVisualRenderElement visualRenderElement = factory.CreateVisualRenderElement(this);

            visualRenderElement.Background       = VisualBackground;
            visualRenderElement.Bounds           = VisualBounds;
            visualRenderElement.ClipToBounds     = VisualClipToBounds;
            visualRenderElement.IsHitTestVisible = VisualIsHitTestVisible;
            visualRenderElement.IsVisible        = VisualIsVisible;
            visualRenderElement.Opacity          = VisualOpacity;
            visualRenderElement.Transform        = VisualTransform;

            visualRenderElement.Content = CreateRenderElementContentOverride(factory);

            int index = 0;

            foreach (Visual child in VisualChildren)
            {
                child.GetRenderElement(factory);
                visualRenderElement.InsertChild(index, child.GetRenderElement(factory));
                index++;
            }

            return(visualRenderElement);
        }
예제 #3
0
        public void BorderRenderTest()
        {
            Brush     backgroundBrush = new LinearGradientBrush(30, Colors.Blue, Colors.Green);
            Brush     borderBrush     = new LinearGradientBrush(-30, Colors.Red, Colors.Blue);
            Thickness borderThickness = new Thickness(10, 20, 30, 40);

            Border border = new Border
            {
                Child = new FrameworkElement {
                    Width = 200, Height = 100
                },
                Background      = backgroundBrush,
                BorderBrush     = borderBrush,
                BorderThickness = borderThickness,
            };

            border.Measure(Size.Infinity);
            border.Arrange(new Rect(border.DesiredSize));

            IRenderElementFactory factory = TestRenderElementFactory.Default;


            IVisualRenderElement visualRenderElement = border.GetRenderElement(factory);

            Assert.AreEqual(new Rect(240, 160), visualRenderElement.Bounds);

            Assert.AreEqual(1, visualRenderElement.Children.Count());

            IBorderRenderElement borderRenderElement = visualRenderElement.Content as IBorderRenderElement;

            Assert.IsNotNull(borderRenderElement);
            Assert.AreEqual(backgroundBrush, borderRenderElement.Background);
            Assert.AreEqual(borderBrush, borderRenderElement.BorderBrush);
            Assert.AreEqual(borderThickness, borderRenderElement.BorderThickness);
            Assert.AreEqual(new Rect(240, 160), borderRenderElement.Bounds);

            IVisualRenderElement childVisualRenderElement = visualRenderElement.Children.Single() as IVisualRenderElement;

            Assert.IsNotNull(childVisualRenderElement);
            Assert.AreEqual(new Rect(10, 20, 200, 100), childVisualRenderElement.Bounds);

            border.Child = null;
            Assert.AreEqual(0, visualRenderElement.Children.Count());
        }