none
Ausdruck über merhere Seiten von Frames RRS feed

  • Allgemeine Diskussion

  • Einen schönen guten Tag.

    Ich habe mir gerade ein kleines Testprogramm geschrieben um bestimmte Funktionen vor der Realisierung des eigentlichen Programms zu testen. Ich habe in meinem Window1 ein Scrollviewer implementiert. Dieser enthält einen Uniformgrid (1 Spalte) mit 4 verschiedenen Frames (verweisen auf UserControls), welche nur unter bestimmten Bedingungen angezeigt werden. Dies habe ich über Checkboxen in einem vorherigen Window realisiert. Dadurch möchte ich eine gewisse Fensterindividualität realisieren und ist für mein eigentliches Programm essentiell. In Window1 befindet sich neben den Scrollviewer  und seinen Inhalten auch ein Button zum Drucken des Inhaltes der Frames bzw. des Uniformgrids. Ich habe mehrere Varianten probiert aber keine war erfolgreich. Bei der einfach PrintVisual-Methode druckt er nur den sichtbaren Inhalt. Bei einer anderen Variante von PrintVisual-Variante druckt er den kompletten Inhalt von Uniformgrid aus aber maximal eine Seite, der Rest wird verschluckt. Ich möchte aber, das er sich individuell anpasst und wenn es nötig ist 2 oder mehr Seiten druckt. Da Anzahl von den aktivieren Frames und deren UserControls abhängt. Ich hoffe mir kann jemand helfen unnd ich hab mich einigermaßen verständlich ausgedrückt.

    Mit freundlichen Grüßen

    Max

    Mittwoch, 26. April 2017 08:23

Alle Antworten

  • Hallo Max,

    Schließ Du Deinen Frame innerhalb von einem ScrollViewer um, der normalerweise seinen horizontalen und vertikalen Scrolling deaktiviert hat. Weitere Informationen für die nächsten Schritte in dieser Print-Methode findest Du im folgenden Thread:
    WPF - pagination when printing a visual

    Gruß,

    Ivan Dragov


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 27. April 2017 08:08
    Moderator

  • Hallo Ivan,

    Danke für den Link. Ich versuche das mal nachzuvollziehen und so muss ich mich erst einmal belesen, wie das genau mit UpdateLayout und IDocumentPaginator genau funktioniert und wie es aussehen muss. Den Test-Code den ich bisher für das Fenster mit den Frames  erstellt habe, würde ich hier unten mal posten. Vllt hat jemand noch ein paar Hinweise oder Tipps, wie es besser geht oder es genau aussehen müsste. Ich wäre für jede Hilfe dankbar. Falls ich es bis dahin selbst funktionstüchtig implementiert habe sollte, würde ich es hier posten. Vllt hilft es jemanden irgendwann mal. 

    Ps.: Nicht wundern über die ganzen eingebundenen Sachen bei using. Hatte schon einige Dinge bzw. Varianten getestet. Das individuelle Anzeigen der Frames über Checkboxen in einem vorherigen Fenster habe ich schon in einem anderen Beispiel erfolgreich getestet. Daher enthält der untere Code das nicht, da es ausschließlich ums angepasste Drucken geht.  

    <Window x:Class="Versuch.Test.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Versuch.Test"
            mc:Ignorable="d"
            Title="Window1" Height="294.15" Width="373.538">
        <Grid x:Name="all">
            <Label x:Name="label" Content="Label" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
            <ScrollViewer  Margin="53,0,0,-3">
                      <UniformGrid x:Name="all2" Columns="1">
                    <!--       <ListView x:Name="all2">   -->
                    <Frame x:Name="frame" Content="Frame"/>
                    <Frame x:Name="frame1" Content="Frame"/>
                    <Frame x:Name="frame2" Content="Frame"/>
                    <Frame x:Name="frame3" Content="Frame"/>
                    <Frame x:Name="frame4" Content="Frame"/>
                    <!-- </ListView> -->
               </UniformGrid> 
            </ScrollViewer>
            <Button x:Name="button" Content="Drucken" HorizontalAlignment="Left" Margin="0,242,0,0" VerticalAlignment="Top" Width="75" Click="windowprint"/>
    
    
        </Grid>
    </Window>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Shapes;
    using Versuch.Test.Testuc;
    using System.Printing;
    using System.Windows.Markup;
    using System.Windows.Xps;
    using System.Drawing;
    using System.IO;
    using System.IO.Packaging;
    using System.Windows.Xps.Packaging;
    
    namespace Versuch.Test {
        /// <summary>
        /// Interaktionslogik für Window1.xaml
        /// </summary>
        public partial class Window1 : Window {
            public Window1() {
                InitializeComponent();
    
                
                frame.Navigate(new UserControl1());
                frame1.Navigate(new UserControl2());
                frame2.Navigate(new UserControl3());
                frame3.Navigate(new UserControl4());
                frame4.Navigate(new UserControl5());
            }
    
    
    
    
            private void windowprint(object sender, RoutedEventArgs e) {                                //Event zum Drucken des Fensterinhaltes mit Durckerabfrage
    
    
    
                
    
                PrintDialog prnt = new PrintDialog();
                if (prnt.ShowDialog() == true) {
                    System.Windows.Size pageSize = new System.Windows.Size(prnt.PrintableAreaWidth - 30, prnt.PrintableAreaHeight - 30);
                    all2.Measure(pageSize);
                    all2.Arrange(new Rect(15, 15, pageSize.Width, pageSize.Height));
                    prnt.PrintVisual(all2, "Work Request");
                }
            }
        }
    
    }
              


    • Bearbeitet Max Erik12 Donnerstag, 27. April 2017 09:04 Anpassung
    Donnerstag, 27. April 2017 08:50