none
Como saber se um item esta dentro de um limite de um FixedPage? RRS feed

  • Pergunta



  • Olá pessoal,

    Eu crie um objeto fixeddocument, dentro do fixedocumente eu crie um fixedcontent e este content guarda um fixedPage.

    No fixedpage eu tenho os itens que preciso na minha pagina

    O problema é quando os itens chegam ao limite desta pagina. Como posso fazer para que gere outra pagina que continue com os itens desejados?

    Alguém pode dar uma ajuda ???

    Obrigado

    Segue o código que eu estou utilizando :

            private void criaPagina()
            {
                document = new FixedDocument();
                document.DocumentPaginator.PageSize = new Size(96 * 8.5, 96 * 11);

                pageContent = new PageContent();
                page = CriaPaginaFixa();

                ((IAddChild)pageContent).AddChild(page);
                document.Pages.Add(pageContent);
                this.documentViewer.Document = document;
               
            }

            /// <summary>
            /// Formata uma Pagina.
            /// </summary>
            private FixedPage CriaPaginaFixa()
            {
                FixedPage p = new FixedPage();
                p.Background = Brushes.White;
                p.Width = 96 * 8.5;
                p.Height = 96 * 11;
               
                panel = new StackPanel();
                panel.Orientation = Orientation.Vertical;
                panel.HorizontalAlignment = HorizontalAlignment.Center;
                panel.VerticalAlignment = VerticalAlignment.Center;
                                                             
                if (modeloAlternativa.Enunciado != null)
                {
                    enunciado = new TextBlock();
                    enunciado.MaxWidth = 700;
                    enunciado.Margin =  new Thickness(0,0,0,10);
                    enunciado.Text = modeloAlternativa.Enunciado;
                    enunciado.TextWrapping = TextWrapping.Wrap;               
                    enunciado.FontSize = 12;
                    enunciado.FontFamily = new FontFamily("Times New Roman");               
                    panel.Children.Add(enunciado);                                            
                }                        
       
                if (modeloAlternativa.ImagemQuestao != null)
                 {         
                    imagemQuestao = new Image();
                    imagemQuestao.Source = new BitmapImage(new Uri(modeloAlternativa.ImagemQuestao, UriKind.Relative));
                    imagemQuestao.Width = 300;
                    imagemQuestao.Height = 100;
                    imagemQuestao.Margin = new Thickness(0, 0, 0, 10);                   
                    panel.Children.Add(imagemQuestao);        
                 }
              
                if (modeloAlternativa.Explicacao != null)
                {
                    explicacao = new TextBlock();
                    explicacao.MaxWidth = 700;
                    explicacao.Text = modeloAlternativa.Explicacao;
                    explicacao.TextWrapping = TextWrapping.Wrap;    
                    explicacao.FontSize = 12;
                    explicacao.FontFamily = new FontFamily("Times New Roman");
                    explicacao.Margin = new Thickness(0, 0, 0, 10);
                    panel.Children.Add(explicacao);
                }

                if (modeloAlternativa.ImagemExplicativa != null)
                {
                    imagemExplicativa = new Image();
                    imagemExplicativa.Source = new BitmapImage(new Uri(modeloAlternativa.ImagemExplicativa, UriKind.Relative));
                    imagemExplicativa.Width = 300;
                    imagemExplicativa.Height = 100;
                    imagemExplicativa.Margin = new Thickness(0, 0, 0, 10);
                    panel.Children.Add(imagemExplicativa);

                }

                if (modeloAlternativa.Alternativas != null)
                {
                    foreach (Alternativa alternativa in modeloAlternativa.Alternativas)
                    {
                       
                        StackPanel panelAlternativa = new StackPanel();
                        TextBlock checkbox = new TextBlock();
                        TextBlock txtItem = new TextBlock();
                        TextBlock txtAlternativa = new TextBlock();
                        Image imagemAlternativa = new Image();

                        panelAlternativa.Orientation = Orientation.Horizontal;
                        panelAlternativa.HorizontalAlignment = HorizontalAlignment.Center;
                        panelAlternativa.VerticalAlignment = VerticalAlignment.Stretch;
                        panelAlternativa.Margin = new Thickness(0, 10, 0, 0);

                        txtItem.Text = alternativa.Item;
                        txtItem.Width = 50;
                        txtAlternativa.FontSize = 12;
                        txtAlternativa.FontFamily = new FontFamily("Times New Roman");
                        panelAlternativa.Children.Add(txtItem);

                        txtAlternativa.MaxWidth = 500;
                        txtAlternativa.Margin = new Thickness(10, 0, 0, 0);
                        txtAlternativa.Text = alternativa.DescricaoAlternativa;
                        txtAlternativa.TextWrapping = TextWrapping.Wrap;
                        txtAlternativa.FontSize = 12;
                        txtAlternativa.FontFamily = new FontFamily("Times New Roman");
                        panelAlternativa.Children.Add(txtAlternativa);

                        imagemAlternativa.Source = new BitmapImage(new Uri(alternativa.Imagem, UriKind.Relative));
                        imagemAlternativa.Width = 100;
                        imagemAlternativa.Height = 75;
                        imagemAlternativa.Margin = new Thickness(10, 0, 0, 0);
                        panelAlternativa.Children.Add(imagemAlternativa);

                        if(alternativa.Correta)
                         checkbox.Text = "Correta";
                        else
                            checkbox.Text = "Incorreta";

                        checkbox.Margin = new Thickness(10, 0, 0, 0);
                        panelAlternativa.Children.Add(checkbox);
                        panel.Children.Add(panelAlternativa);
                    }
                }
                FixedPage.SetTop(panel, 96 * 0.75);
                FixedPage.SetLeft(panel, 96 * 0.75);
                FixedPage.SetRight(panel, 96 * 0.75);
                FixedPage.SetBottom(panel, 96 * 0.75);
                p.Children.Add((UIElement)panel);
        
                return p;


            }
    quarta-feira, 19 de março de 2008 14:44

Respostas

  • Em primeiro lugar, não use um StackPanel: embora mais fácil, ele não irá permitir que você posicione os elementos do jeito que você quer. Use um Canvas e vá posicionando os elementos com as propriedades Canvas.Left e Canvas.Top:

    Canvas panelAlternativa = new Canvasl();

    int posAtu = 10;
    for (int i = 0;i<100;i++)
    {
      if (posAtu > 8*96)
        CriaNovaPagina();
      TextBox txtItem = new TextBox();
      txtItem.Text = alternativa.Item;
      txtItem.Width = 50;
      txtAlternativa.FontSize = 12;
      txtAlternativa.FontFamily = new FontFamily("Times New Roman");
      txtAlternativa.SetValue(Canvas.LeftProperty,10);
      txtAlternativa.SetValue(Canvas.TopProperty,posAtu);
      posAtu += 20;
      panelAlternativa.Children.Add(txtItem);
    }


    Bruno
    quarta-feira, 26 de março de 2008 10:51