private static void ResetVisualState(ContentPresenter objectToPrint, PrintCapabilities printCaps) { objectToPrint.Width = double.NaN; objectToPrint.UpdateLayout(); objectToPrint.LayoutTransform = new ScaleTransform(1, 1); Size size = new Size(printCaps.PageImageableArea.ExtentWidth, printCaps.PageImageableArea.ExtentHeight); objectToPrint.Measure(size); objectToPrint.Arrange(new Rect(new Point(printCaps.PageImageableArea.OriginWidth, printCaps.PageImageableArea.OriginHeight), size)); }
ContentPresenter PagePresenterFromRestItems() { var restItems = new ArraySegment <TItem>(allItems, index, allItems.Length - index); var presenter = new ContentPresenter() { Content = printable.CreatePage(restItems, pageIndex, pageCount: 1), Width = pageSize.Width, Height = pageSize.Height, }; presenter.Measure(pageSize); presenter.Arrange(new Rect(new Point(0, 0), pageSize)); presenter.UpdateLayout(); return(presenter); }
private void OnClosing(object sender, CancelEventArgs e) { if (!IsResultOk) { return; } foreach (var item in IconsList.FindVisualChildren <FrameworkElement>().Where(x => x.Name == @"NewIcon")) { if (!(item.DataContext is AppWindowItem data) || !data.IsInEditMode) { continue; } item.DataContext = data; data.Save(); var size = new Size(CommonAcConsts.AppIconWidth, CommonAcConsts.AppIconHeight); var result = new ContentPresenter { Width = size.Width, Height = size.Height, Content = item }; SaveIcon(); data.ShowEnabled = !data.ShowEnabled; SaveIcon(); void SaveIcon() { result.Measure(size); result.Arrange(new Rect(size)); result.ApplyTemplate(); result.UpdateLayout(); var bmp = new RenderTargetBitmap(CommonAcConsts.AppIconWidth, CommonAcConsts.AppIconHeight, 96, 96, PixelFormats.Pbgra32); bmp.Render(result); bmp.SaveTo(data.IconOriginal); BetterImage.Refresh(data.IconOriginal); } } }
private static void ResetVisualState(ContentPresenter objectToPrint, PrintCapabilities printCaps, bool wasVirtualized) { objectToPrint.Width = double.NaN; objectToPrint.UpdateLayout(); objectToPrint.LayoutTransform = new ScaleTransform(1, 1); Size size = new Size(printCaps.PageImageableArea.ExtentWidth, printCaps.PageImageableArea.ExtentHeight); objectToPrint.Measure(size); objectToPrint.Arrange(new Rect(new Point(printCaps.PageImageableArea.OriginWidth, printCaps.PageImageableArea.OriginHeight), size)); if (!wasVirtualized) { return; } var dg = objectToPrint.FindChild <DataGrid>(); dg.EnableRowVirtualization = true; dg.EnableColumnVirtualization = true; VirtualizingPanel.SetIsVirtualizing(dg, true); }
public IEnumerable <OrderFormPage> PaginateCore(Size size) { // ページネーションを行うために、実際に DataGrid を生成する。 var preview = new OrderFormPage(Header, Items); var presenter = new ContentPresenter() { Content = preview, Width = size.Width, Height = size.Height, }; presenter.Measure(size); presenter.Arrange(new Rect(new Point(0, 0), size)); presenter.UpdateLayout(); var headeredGrid = presenter.VisualDescendantsBreadthFirstOrder().OfType <HeaderedGrid>().First(); var scrollViewer = headeredGrid.ScrollViewer; var grid = headeredGrid.Grid; var items = preview.Items; var index = 0; while (index < items.Count) { // 表示されている行数を計算する。 var totalRowHeight = grid.RowDefinitions[0].ActualHeight; var count = 0; while (index + count < items.Count) { totalRowHeight += grid.RowDefinitions[1 + index + count].ActualHeight; if (totalRowHeight > scrollViewer.ViewportHeight) { break; } count++; } if (count == 0) { // ヘッダー行が大きすぎてコンテンツを表示できていない。 throw new Exception(); } var pageItems = Enumerable.Range(index, count).Select(i => items[i]).ToArray(); // 1画面に表示できた行からなるページを追加する。 yield return(new OrderFormPage(Header, pageItems)); if (index + count < items.Count) { // いまのページに追加された分の行を非表示 (高さ 0) にする。 foreach (var i in Enumerable.Range(index, count)) { grid.RowDefinitions[1 + i].MaxHeight = 0.0; } // scrollViewer.ViewportHeight を更新する。 presenter.UpdateLayout(); } index += count; } }
Paginate <X>(this ISingleHeaderedGridPage <X> @this, Size pageSize) { var presenter = new ContentPresenter() { Content = @this, Width = pageSize.Width, Height = pageSize.Height, }; presenter.Measure(pageSize); presenter.Arrange(new Rect(new Point(0, 0), pageSize)); presenter.UpdateLayout(); var headeredGrid = presenter.VisualDescendantsBreadthFirstOrder().OfType <HeaderedGrid>().First(); var scrollViewer = headeredGrid.ScrollViewer; var grid = headeredGrid.Grid; var items = @this.Items; var index = 0; while (index < items.Count) { // Count the visible rows. var totalRowHeight = grid.RowDefinitions[0].ActualHeight; var count = 0; while (index + count < items.Count) { totalRowHeight += grid.RowDefinitions[1 + index + count].ActualHeight; if (totalRowHeight > scrollViewer.ViewportHeight) { break; } count++; } if (count == 0) { throw new Exception("Because of too large header row or too small height, the page can't show any rows."); } yield return (Enumerable.Range(index, count).Select(i => items[i]).ToArray()); if (index + count < items.Count) { // Hide visible rows. foreach (var i in Enumerable.Range(index, count)) { grid.RowDefinitions[1 + i].MaxHeight = 0.0; } // Update UI properties, including scrollViewer.ViewportHeight. presenter.UpdateLayout(); } index += count; } }