private void CampoProdutos_Loaded(object sender, RoutedEventArgs e)
        {
            double total = 0, maximo = espacoParaProdutos.ActualHeight;
            var    produtosNestaPagina = ContextoGeral._DadosProdutos.TakeWhile(x =>
            {
                var item = new PartesDANFE.ItemProduto()
                {
                    DataContext = x
                };
                item.Measure(new Windows.Foundation.Size(PartesDANFE.DimensoesPadrao.LarguraTotalStatic, espacoParaProdutos.ActualHeight));
                total += item.DesiredSize.Height;
                return(total <= maximo);
            });

            produtosNestaPagina.ToList().ForEach(((PartesDANFE.CampoProdutos)sender).Contexto.Add);

            bool excessoProdutos       = ContextoGeral._DadosProdutos.Length - produtosNestaPagina.Count() > 0;
            bool excessoObservacao     = infoAdicional.CampoObservacoes.HasOverflowContent;

            if (excessoProdutos)
            {
                var produtosRestantes = ContextoGeral._DadosProdutos.Except(produtosNestaPagina);
                if (excessoObservacao)
                {
                    PaiPaginas.Add(new PaginaExtra(ContextoNFe, produtosRestantes, infoAdicional.CampoObservacoes, PaiPaginas, MotivoCriacaoPaginaExtra.Ambos, this));
                }
                else
                {
                    PaiPaginas.Add(new PaginaExtra(ContextoNFe, produtosRestantes, infoAdicional.CampoObservacoes, PaiPaginas, MotivoCriacaoPaginaExtra.Produtos, this));
                }
            }
            else if (excessoObservacao)
            {
                PaiPaginas.Add(new PaginaExtra(ContextoNFe, null, infoAdicional.CampoObservacoes, PaiPaginas, MotivoCriacaoPaginaExtra.Observacao, this));
            }
            else
            {
                OnPaginaCarregada();
            }
        }
        public PaginaExtra(DadosNFe cabecalho, IEnumerable <DadosProduto> produtos, RichTextBlock infoAdicional, UIElementCollection paiPaginas, MotivoCriacaoPaginaExtra motivo, PaginaPrincipal principal)
        {
            InitializeComponent();
            ContextoNFe = cabecalho;
            if (motivo == MotivoCriacaoPaginaExtra.Ambos)
            {
                double total = 0, maximo = espacoParaProdutos.ActualHeight;
                var    produtosNestaPagina = produtos.TakeWhile(x =>
                {
                    var item = new PartesDANFE.ItemProduto()
                    {
                        DataContext = x
                    };
                    item.Measure(new Windows.Foundation.Size(PartesDANFE.DimensoesPadrao.LarguraTotalStatic, espacoParaProdutos.ActualHeight));
                    total += item.DesiredSize.Height;
                    return(total <= maximo);
                });
                campoProdutos.DataContext = produtosNestaPagina.ToArray();

                bool excessoProdutos       = produtos.Count() - produtosNestaPagina.Count() > 0;

                if (excessoProdutos)
                {
                    var produtosRestantes = produtos.Except(produtosNestaPagina);
                    paiPaginas.Add(new PaginaExtra(cabecalho, produtosRestantes, infoAdicional, paiPaginas, MotivoCriacaoPaginaExtra.Ambos, principal));
                }
                else
                {
                    infoAdicional.OverflowContentTarget = campoInfo;
                    if (infoAdicional.HasOverflowContent)
                    {
                        infoAdicional.OverflowContentTarget = null;
                        grd.Children.Remove(geralCampoInfo);
                        paiPaginas.Add(new PaginaExtra(cabecalho, null, infoAdicional, paiPaginas, MotivoCriacaoPaginaExtra.Observacao, principal));
                    }
                }
            }
            else if (motivo == MotivoCriacaoPaginaExtra.Observacao)
            {
                grd.Children.Remove(campoProdutos);
                espacoParaProdutos.Height           = new GridLength(0);
                infoAdicional.OverflowContentTarget = campoInfo;
            }
            else
            {
                grd.Children.Remove(geralCampoInfo);

                double total = 0, maximo = espacoParaProdutos.ActualHeight;
                var    produtosNestaPagina = produtos.TakeWhile(x =>
                {
                    var item = new PartesDANFE.ItemProduto()
                    {
                        DataContext = x
                    };
                    item.Measure(new Windows.Foundation.Size(PartesDANFE.DimensoesPadrao.LarguraTotalStatic, espacoParaProdutos.ActualHeight));
                    total += item.DesiredSize.Height;
                    return(total <= maximo);
                });
                produtosNestaPagina.ToList().ForEach(campoProdutos.Contexto.Add);

                bool excessoProdutos       = produtos.Count() - produtosNestaPagina.Count() > 0;

                if (excessoProdutos)
                {
                    var produtosRestantes = produtos.Except(produtosNestaPagina);
                    paiPaginas.Add(new PaginaExtra(cabecalho, produtosRestantes, infoAdicional, paiPaginas, MotivoCriacaoPaginaExtra.Produtos, principal));
                }
            }
            principal.OnPaginaCarregada();
        }