public static void Run() { // ExStart:1 // The path to the documents directory. string dataDir = RunExamples.GetDataDir_WorkingWithVisualBrush(); XpsDocument doc = new XpsDocument(); // Geometry for magenta grid VisualBrush XpsPathGeometry pathGeometry = doc.CreatePathGeometry(); pathGeometry.AddSegment(doc.CreatePolyLineSegment( new PointF[] { new PointF(240f, 5f), new PointF(240f, 310f), new PointF(0f, 310f) })); pathGeometry[0].StartPoint = new PointF(0f, 5f); // Canvas for magenta grid VisualBrush XpsCanvas visualCanvas = doc.CreateCanvas(); XpsPath visualPath = visualCanvas.AddPath( doc.CreatePathGeometry("M 0,4 L 4,4 4,0 6,0 6,4 10,4 10,6 6,6 6,10 4,10 4,6 0,6 Z")); visualPath.Fill = doc.CreateSolidColorBrush(doc.CreateColor(1f, .61f, 0.1f, 0.61f)); XpsPath gridPath = doc.CreatePath(pathGeometry); //Create Visual Brush, it is specified by some XPS fragment (vector graphics and glyphs) gridPath.Fill = doc.CreateVisualBrush(visualCanvas, new RectangleF(0f, 0f, 10f, 10f), new RectangleF(0f, 0f, 10f, 10f)); ((XpsVisualBrush)gridPath.Fill).TileMode = XpsTileMode.Tile; // New canvas XpsCanvas canvas = doc.AddCanvas(); canvas.RenderTransform = doc.CreateMatrix(1f, 0f, 0f, 1f, 268f, 70f); // Add grid canvas.AddPath(gridPath); // Red transparent rectangle in the middle top XpsPath path = canvas.AddPath(doc.CreatePathGeometry("M 30,20 l 258.24,0 0,56.64 -258.24,0 Z")); path = canvas.AddPath(doc.CreatePathGeometry("M 10,10 L 228,10 228,100 10,100")); path.Fill = doc.CreateSolidColorBrush(doc.CreateColor(1.0f, 0.0f, 0.0f)); path.Opacity = 0.7f; // Save resultant XPS document doc.Save(dataDir + "AddGrid_out.xps"); // ExEnd:1 }
public static void Run() { // ExStart:1 // The path to the documents directory. string dataDir = RunExamples.GetDataDir_WorkingWithTransparency(); // Create new XPS Document XpsDocument doc = new XpsDocument(); // Just to demonstrate transparency doc.AddPath(doc.CreatePathGeometry("M120,0 H400 v1000 H120")).Fill = doc.CreateSolidColorBrush(Color.Gray); doc.AddPath(doc.CreatePathGeometry("M300,120 h600 V420 h-600")).Fill = doc.CreateSolidColorBrush(Color.Gray); // Create path with closed rectangle geometry XpsPath path1 = doc.CreatePath(doc.CreatePathGeometry("M20,20 h200 v200 h-200 z")); // Set blue solid brush to fill path1 path1.Fill = doc.CreateSolidColorBrush(Color.Blue); // Add it to the current page XpsPath path2 = doc.Add(path1); // path1 and path2 are the same as soon as path1 hasn't been placed inside any other element // (which means that path1 had no parent element). // Because of that rectangle's color on the page effectively turns to green path2.Fill = doc.CreateSolidColorBrush(Color.Green); // Now add path2 once again. Now path2 has parent. So path3 won't be the same as path2. // Thus a new rectangle is painted on the page ... XpsPath path3 = doc.Add(path2); // ... and we shift it 300 units lower ... path3.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 0, 300); // ... and set red solid brush to fill it path3.Fill = doc.CreateSolidColorBrush(Color.Red); // Create new path4 with path2's geometry ... XpsPath path4 = doc.AddPath(path2.Data); // ... shift it 300 units to the right ... path4.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 300, 0); // ... and set blue solid fill path4.Fill = doc.CreateSolidColorBrush(Color.Blue); // Add path4 once again. XpsPath path5 = doc.Add(path4); // path4 and path5 are not the same again ... // (move path5 300 units lower) path5.RenderTransform = path5.RenderTransform.Clone(); // to disconnect RenderTransform value from path4 (see next comment about Fill property) path5.RenderTransform.Translate(0, 300); // ... but if we set the opacity of Fill property, it will take effect on both path5 and path4 // because brush is a complex property value which remains the same for path5 and path4 path5.Fill.Opacity = 0.8f; // Create new path6 with path2's geometry ... XpsPath path6 = doc.AddPath(path2.Data); // ... shift it 600 units to the right ... path6.RenderTransform = doc.CreateMatrix(1, 0, 0, 1, 600, 0); // ... and set yellow solid fill path6.Fill = doc.CreateSolidColorBrush(Color.Yellow); // Now add path6's clone ... XpsPath path7 = doc.Add(path6.Clone()); // (move path5 300 units lower) path7.RenderTransform = path7.RenderTransform.Clone(); path7.RenderTransform.Translate(0, 300); // ... and set opacity for path7 path7.Fill.Opacity = 0.8f; // Now opacity effects independantly as soon as property values are cloned along with the element // The following code block is equivalent to the previous one. // Add path6 itself. path6 and path7 are not the same. Although their Fill property values are the same //XpsPath path7 = doc.Add(path6); //path7.RenderTransform = path7.RenderTransform.Clone(); //path7.RenderTransform.Translate(0, 300); // To "disconnect" path7's Fill property from path6's Fill property reassign it to its clone (or path6's Fill clone) //path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone(); //path7.Fill.Opacity = 0.8f; // Save resultant XPS document doc.Save(dataDir + "WorkingWithTransparency_out.xps"); // ExEnd:1 }