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); }
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); }
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()); }