public PageRoutedEventArgs(RoutedEvent routedEvent, GraphicVisualPage source) : base(routedEvent, source) { PageScale = source.PageScale; PageSize = source.PageSize; RenderSize = source.RenderSize; //PageOffset = new Point(source.PageOffsetX, source.PageOffsetY); PageOffset = source.PageOffset; }
// // Property Changed Callback // private static void VisualHostChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { GraphicVisualPage page = d as GraphicVisualPage; if (e.OldValue != null) { page.Children.Remove((Visual)e.OldValue); } if (e.NewValue != null) { page.Children.Add((Visual)e.NewValue); page.SetVisualHostTranform(); } }
public override void OnApplyTemplate() { base.OnApplyTemplate(); GraphicVisualPage page = GetTemplateChild("PART_Page") as GraphicVisualPage; _page = page; if (page != null) { page.PageSizeChanged += (sender, e) => { SetScrollBars(e as PageRoutedEventArgs); e.Handled = true; }; page.PageScaleChanged += (sender, e) => { SetScrollBars(e as PageRoutedEventArgs); e.Handled = true; }; page.PageRenderSizeChanged += (sender, e) => { SetScrollBars(e as PageRoutedEventArgs); e.Handled = true; }; page.PageOffsetChanged += (sender, e) => { // 强制刷新 OperatorAdorner.InvalidateVisual(); e.Handled = true; }; } AdornerDecorator addr = GetTemplateChild("PART_AdornerDecorator") as AdornerDecorator; if (addr != null) { _operatorAdorner = new PageOperatorAdorner(page); _operatorAdorner.DataContext = this; //_pageAdorner.Canvas.Background = Brushes.LightGreen.Clone(); //_pageAdorner.Canvas.Background.Opacity = 0.3; addr.AdornerLayer.Add(_operatorAdorner); } }
// // Property Changed Callback // private static void PageScaleChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { // 页面比例缩放时,同时调整页面偏移量,保证画面中心位置不变 // double delt = (double)e.NewValue / (double)e.OldValue; GraphicVisualPage page = d as GraphicVisualPage; double offsetX = page.PageOffset.X * delt + page.ActualWidth / 2.0 * (1.0 - delt); double offsetY = page.PageOffset.Y * delt + page.ActualHeight / 2.0 * (1.0 - delt); page.PageOffset = new Point(offsetX, offsetY); // 更新网格 Update grid page.UpdateGridVisual(); // 激发 PageScaleChangedEvent 事件 // Raise PageScaleChangedEvent page.RaiseEvent(new PageRoutedEventArgs(PageScaleChangedEvent, page)); }