Frage

Ich kann nicht verstehen, warum dies nicht funktioniert, oder das, was ich brauche, um es Arbeit zu lernen.

Um repro, eine einfache WPF-Anwendung erstellen und das Hauptfenster des Konstruktor ersetzen so:

    public MainWindow()
    {
        InitializeComponent();

        // simple visual definition
        var grid = new Grid { Width = 300, Height = 300 };
        var text = new TextBlock 
                       { 
                         Text = "Y DON'T I WORK???", 
                         FontSize = 100, 
                         FontWeight = 
                         FontWeights.Bold 
                       };
        grid.Children.Add(text);

        // update the layout so everything is awesome cool
        grid.Measure(grid.DesiredSize);
        grid.Arrange(new Rect(grid.DesiredSize));
        grid.UpdateLayout();

        // create a BitmapSource from the visual
        var rtb = new RenderTargetBitmap(
                                    (int)grid.Width,
                                    (int)grid.Height,
                                    96,
                                    96,
                                    PixelFormats.Pbgra32);
        rtb.Render(grid);

        // Slap it in the window
        this.Content = new Image { Source = rtb, Width = 300, Height = 300 };
    }

Dies führt zu einem leeren Bild. Wenn ich die RTB auf der Festplatte als PNG seine die richtige Größe speichern, aber transparent sein.

Wenn ich aber tun dies mit einem visuellen, die auf dem Bildschirm angezeigt worden ist, es funktioniert gut.

Wie kann ich machen eine visuelle ich außerhalb des Bildschirms in eine Bitmap konstruiert haben?

War es hilfreich?

Lösung

Weil Elemente haben keine gewünschte Größe, bis Sie sie messen. Sie sagten, das Netz Größe selbst mit einem verfügbaren Raum von 0x0. Ändern Sie den Code an:

grid.Measure(new Size(grid.Width, grid.Height));
grid.Arrange(new Rect(new Size(grid.Width, grid.Height)));

(Der Aufruf von UpdateLayout ist nicht benötigt.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top