private void RenderCanvasPreview(CanvasLayoutModel canvas) { var screenWorkArea = App.Overlay.WorkArea; canvas.ScaleLayout(workAreaWidth: screenWorkArea.Width, workAreaHeight: screenWorkArea.Height); Viewbox viewbox = new Viewbox { Stretch = Stretch.Uniform, }; Body.Children.Add(viewbox); Canvas frame = new Canvas { Width = screenWorkArea.Width, Height = screenWorkArea.Height, }; viewbox.Child = frame; foreach (Int32Rect zone in canvas.Zones) { Border rect = new Border(); Canvas.SetTop(rect, zone.Y); Canvas.SetLeft(rect, zone.X); rect.MinWidth = zone.Width; rect.MinHeight = zone.Height; if (IsActualSize) { rect.Style = (Style)FindResource("CanvasLayoutActualScalePreviewStyle"); } else { rect.Style = (Style)FindResource("CanvasLayoutSmallScalePreviewStyle"); } frame.Children.Add(rect); } if (App.DebugMode) { TextBlock text = new TextBlock(); text.Text = "(" + App.Overlay.WorkArea.X + "," + App.Overlay.WorkArea.Y + ")"; text.FontSize = 42; frame.Children.Add(text); } }
private void OnLoaded(object sender, RoutedEventArgs e) { CanvasLayoutModel model = (CanvasLayoutModel)DataContext; if (model != null) { _model = model; var workArea = App.Overlay.WorkArea; _model.ScaleLayout(workAreaWidth: workArea.Width, workAreaHeight: workArea.Height); UpdateZoneRects(); _model.PropertyChanged += OnModelChanged; } }
private void UpdateZoneRects() { var workArea = App.Overlay.WorkArea; Preview.Width = workArea.Width; Preview.Height = workArea.Height; _model.ScaleLayout(workAreaWidth: workArea.Width, workAreaHeight: workArea.Height); UIElementCollection previewChildren = Preview.Children; int previewChildrenCount = previewChildren.Count; while (previewChildrenCount < _model.Zones.Count) { CanvasZone zone = new CanvasZone { Model = _model, }; Preview.Children.Add(zone); previewChildrenCount++; } while (previewChildrenCount > _model.Zones.Count) { Preview.Children.RemoveAt(previewChildrenCount - 1); previewChildrenCount--; } for (int i = 0; i < previewChildrenCount; i++) { Int32Rect rect = _model.Zones[i]; CanvasZone zone = previewChildren[i] as CanvasZone; zone.ZoneIndex = i; Canvas.SetLeft(zone, rect.X); Canvas.SetTop(zone, rect.Y); zone.Height = rect.Height; zone.Width = rect.Width; zone.LabelID.Content = i + 1; } }