Exemple #1
0
        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);
            }
Exemple #3
0
        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);
                }
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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;
            }
        }