/ / Render WPF UIElement का उपयोग किए बिना व्यवस्था () - wpf, बिटमैप, रेंडरर्टगेटबिटमैप

व्यवस्था () - wpf, bitmap, rendertargetbitmap का उपयोग किए बिना WPF UIElement को प्रस्तुत करें

मैं अपने ViewModel से एक कैनवास रेंडर करने की कोशिश कर रहा हूँ। अपने वीएम को कैनवास पास करने के बाद मैं इस फ़ंक्शन का उपयोग करके इसे प्रस्तुत करता हूं:

private void GenerateTextures(object obj)
{
if (!(obj is UIElement))
return;

UIElement control = (UIElement)obj;

for (int i = 0; i <= _textureCount - 1; ++i)
{
string path = OutPath + i.ToString() + TextureFormat;
FontText = i.ToString();

using (FileStream fs = new FileStream(path,FileMode.Create))
{
control.Measure(new Size(_textureSize, _textureSize));
//control.Measure(size);
control.Arrange(new Rect(new Size(_textureSize, _textureSize)));
control.UpdateLayout();

RenderTargetBitmap bitmap = new RenderTargetBitmap(_textureSize, _textureSize, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(control);
BitmapEncoder encoder;
switch (TextureFormat)
{
case ".png":
encoder = new PngBitmapEncoder();
break;
case ".jpg":
encoder = new JpegBitmapEncoder();
break;
case ".gif":
encoder = new GifBitmapEncoder();
break;
default:
encoder = new PngBitmapEncoder();
break;
}

encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.Save(fs);
}
}
}

यह ठीक काम करता है और व्यवस्था के अलावा सभी ()फ़ंक्शन मेरे कैनवास को इसके माता-पिता के शीर्ष बाईं ओर ले जाने का कारण बनता है जो मेरे यूआई को दृष्टि से तोड़ देता है। अगर मैं अपने प्रदान किए गए बिटमैप की तुलना में व्यवस्थित करने के लिए कॉल को हटा देता हूं तो कैवस का एक छोटा कोना है।

मैं अपने कैवस को UI पर ले जाए बिना कैसे प्रस्तुत कर सकता हूं?

उत्तर:

जवाब के लिए 0 № 1

मुझे लगता है कि इसे व्यवस्थित करते समय आपको कैनवास के लिए स्थान निर्दिष्ट करना चाहिए। आप इस कंस्ट्रक्टर का उपयोग कर सकते हैं Rect:

सार्वजनिक रेक्ट (बिंदु स्थान, आकार का आकार);

तो आपका कोड इस तरह हो सकता है:

control.Arrange(new Rect(new Point(X,Y), new Size(_textureSize, _textureSize)));

इसके अलावा, पैरेंट लेआउट बदलने या अपडेट होने के बाद, आपको माप को लागू करना चाहिए और कोड की व्यवस्था करनी चाहिए।