PrintDialog verschiebt Image auf MainWindow.

  • WPF

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von doLob.

    PrintDialog verschiebt Image auf MainWindow.

    Hi,
    ich habe ein nicht erklärbares Verhaten eines Images beim erscheinen des PrintDialogs.
    Das Image erstelle ich so:

    XML-Quellcode

    1. <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="437" Margin="340,76,0,0" VerticalAlignment="Top" Width="693">
    2. <Image x:Name="PictureBox2" Source="wwlan50.png" Width="693" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0" Height="437"/>
    3. </Border>

    Wenn ich dann das Image drucken möchte und der PrintDialog erscheint:

    VB.NET-Quellcode

    1. If (dialog.ShowDialog = True) Then
    2. dialog.PrintVisual(PictureBox2, " ")
    3. End If

    verschiebt sich das Image nach rechts und nach unten.
    Der Border bleibt an seiner Position.

    Habe dafür keine Erklärung. Woran könnte das liegen?

    MfG
    Hallo

    Wenn ich mir den XAML ansehe würde ich meinen du hast das Image per Designertoolbox mittels Drag&Drop draufgezogen. Das ist immer eine schlechte Idee. Arbeite rein mit dem Code und schreibe diesen, spart dir viele nerven. Schau dir mal meine Tutorialreihe an, da gehe ich darauf ein. Designe deine Views so das sich diese wie gewünscht anpassen - so das es bei größenänderung auch passt.

    Um hier eine genaue Aussage treffen zu können benötigen wir weit mehr XAML, das ist dir aber hoffentlich auch klar.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ja,erwischt. Wir hatten gestern schon mal Schriftwechsel.
    Habe als WPF Neuling natürlich wie in der Forms-Welt mit Drag&Drop angefangen.
    So sieht mei ganzer XAML Code aus:
    Spoiler anzeigen

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:QRCGen"
    7. mc:Ignorable="d"
    8. Title="QR-Code Generator" Height="607" Width="1056"
    9. Icon="WLAN1.ico">
    10. <Grid Margin="0,-64,-227.8,-70.2">
    11. <Image x:Name="PictureBox1" HorizontalAlignment="Left" Height="216" Margin="63,76,0,0" VerticalAlignment="Top" Width="216" Source="wlan-transparent-612x612.png"/>
    12. <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="437" Margin="340,76,0,0" VerticalAlignment="Top" Width="693">
    13. <Image x:Name="PictureBox2" Source="wwlan50.png" Width="693" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,0,0" Height="437"/>
    14. </Border>
    15. <Button x:Name="Button1" Content="QR Code erzeugen" HorizontalAlignment="Left" Height="22" Margin="19,307,0,0" VerticalAlignment="Top" Width="303" RenderTransformOrigin="0.506,2.1"/>
    16. <CheckBox x:Name="CheckBox1" Content="Password mitdrucken" HorizontalAlignment="Left" Height="18" Margin="19,360,0,0" VerticalAlignment="Top" Width="303" RenderTransformOrigin="0.478,0.767"/>
    17. <Button x:Name="Button2" Content="Karte drucken" HorizontalAlignment="Left" Height="22" Margin="19,408,0,0" VerticalAlignment="Top" Width="303" />
    18. <Button x:Name="Button3" Content="Drucken" HorizontalAlignment="Left" Height="22" Margin="19,450,0,0" VerticalAlignment="Top" Width="303" />
    19. <Button x:Name="Button4" Content="Bild speichern" HorizontalAlignment="Left" Height="22" Margin="19,491,0,0" VerticalAlignment="Top" Width="303" />
    20. <RadioButton x:Name="RadioButton1" Content="WPA/WPA2/WPA3" HorizontalAlignment="Left" Height="19" Margin="19,544,0,0" VerticalAlignment="Top" Width="133" RenderTransformOrigin="-0.059,0.463" IsChecked="True"/>
    21. <RadioButton x:Name="RadioButton2" Content="WEP" HorizontalAlignment="Left" Height="16" Margin="19,589,0,0" VerticalAlignment="Top" Width="133" RenderTransformOrigin="0.576,0.025"/>
    22. <TextBox x:Name="TextBox1" HorizontalAlignment="Left" Height="26" Margin="340,542,0,0" TextWrapping="Wrap" Text="ABC" VerticalAlignment="Top" Width="693" FontFamily="Consolas" FontSize="16" VerticalContentAlignment="Center" MaxLength="30"/>
    23. <TextBox x:Name="TextBox2" HorizontalAlignment="Left" Height="26" Margin="340,587,0,0" TextWrapping="Wrap" Text="123" VerticalAlignment="Top" Width="693" FontFamily="Consolas" FontSize="16" VerticalContentAlignment="Center" Cursor="No" MaxLength="63"/>
    24. <Label Content="SSID:" HorizontalAlignment="Left" Height="26" Margin="245,542,0,0" VerticalAlignment="Top" Width="90" FontFamily="Consolas" FontWeight="Bold" FontSize="16"/>
    25. <Label Content="Passwort:" HorizontalAlignment="Left" Height="26" Margin="245,587,0,0" VerticalAlignment="Top" Width="90" RenderTransformOrigin="0.755,0.238" FontFamily="Consolas" FontWeight="Bold" FontSize="16"/>
    26. </Grid>
    27. </Window>
    Ok, ja. Sorry.

    1x komplett neu machen. Dann klappt es auch.
    Verschachtle in diverse Container, Panels und Grids. Dazu habe ich auch ein eigenes Kapitel. Schau dir das in ruhe an.

    Gerne kannst es dann nichmals Posten und wir schaun nochmal gemeinsam drüber. So lernst du es vin Andang an besser zu machen.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Es bringt zwar nichts in diesem Wald mit einem Haufen Width, Height und Margin-Angaben irgendwelche Ratespielchen zu starten aber ich denke das beim Drucken die Größe des Controls auf die Seitengröße geändert wird was dies zur folge hat. Also erstmal alles korrekt machen und dann mal weitersehen.

    Aber Allgemein ist es sowieso keine gute Idee das Control zu Drucken. Besser ist es hierfür einen Druck anhand der Daten *Hier ein Bild* zu generieren.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hab's mal versucht nachzustellen. Dazu hab in den Semmel- XAML-Code genommen und n eigenes Bild. Die Icon-Zeile musste ich rausnehmen, da ich kein eigenes zur Hand hatte. Im Code Behind habe ich mangels besseren Wissens das hier:

    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As RoutedEventArgs) Handles Button3.Click
    2. Dim Dialog As New PrintDialog
    3. If Dialog.ShowDialog Then Dialog.PrintVisual(PictureBox2, " ")
    4. End Sub
    Aber wie auf den Bildern zu sehen: Keine Bildverschiebung.

    PS: Ja, ich werde gaaanz langsam mit WPF anfangen. :)
    Bilder
    • vorher.png

      22,5 kB, 522×299, 49 mal angesehen
    • nachher.png

      35,53 kB, 522×299, 42 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ups. Dank deinem Versuch hab ich jetzt auch den Übeltäter gefunden.
    Im dialog habe ich die Druckausgabe formatiert -- dachte ich. ;(
    Dim dialog As New Controls.PrintDialog
    dialog.PrintTicket.PageOrientation = PageOrientation.Landscape
    Dim Rand As Integer = 75
    Dim Format As Size = New Size((dialog.PrintableAreaWidth - (Rand * 2)), (dialog.PrintableAreaHeight - Rand))
    PictureBox2.Arrange(New Rect(Rand, Rand, Format.Width, Format.Height))

    Wenn ich das auskommentiere, ist der Fehler auch weg.

    Ihr habt recht.
    Es ist problemloser das Ding neu zu schreiben und dabei was zu lernen als zu versuchen mit Copy&Paste und Drag&Drop
    etwas aus der Form-Welt zu portieren.