إنشاء عنصر WPF Offscreen وتقديم صورة نقطية
-
18-09-2019 - |
سؤال
لا أستطيع أن أفهم لماذا هذا لا يعمل، أو ما أحتاج إليه في العمل.
لإعادة توضيح، قم بإنشاء تطبيق 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 غير ضرورية.)
لا تنتمي إلى StackOverflow