سؤال

لا أستطيع أن أفهم لماذا هذا لا يعمل، أو ما أحتاج إليه في العمل.

لإعادة توضيح، قم بإنشاء تطبيق WPF بسيط واستبدال منشئ النافذة الرئيسي بشكل فعلي:

    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 };
    }

هذا يؤدي إلى صورة فارغة. إذا قمت بحفظ RTB إلى القرص كحزمة PNG لها الحجم الصحيح ولكن شفاف.

ومع ذلك، إذا قمت بذلك مع مرئي يتم عرضه على الشاشة، فهو يعمل بشكل جيد.

كيف يمكنني تقديم مرئي قمت ببناء خارج الشاشة إلى صورة نقطية؟

هل كانت مفيدة؟

المحلول

لأن العناصر لا تملك الحجم المرغوب حتى تقوم بقياسها. كنت تخبر الشبكة بحجم نفسها مع مساحة متاحة من 0x0. تغيير الكود الخاص بك إلى:

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

(المكالمة إلى UpdateLayout غير ضرورية.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top