मैं इसके साथ भी संघर्ष कर रहा हूं। मैं एसडीके उदाहरण से ऊपर चला गया हूं। यह समाधान आपके लिए उपयोगी हो सकता है। यदि कोई तरीका है कि आप एक रिचटेक्स्टबॉक्स में प्रिंट करना चाहते हैं, तो आप इसे प्रोग्रामेटिक रूप से पैराग्राफ बना सकते हैं। और एसडीके उदाहरण में RichTextBox को एक रिक्त स्टैकपैनल के साथ प्रतिस्थापित करें जिसे आपने ग्रिड आवश्यकताओं को निर्धारित किया है, और यह आपकी समस्या का समाधान करेगा। मेरा बिल्कुल एक ही मुद्दा नहीं था, क्योंकि मैंने इसे 2 कॉलम वाली किराने की सूची बनाने के साथ भी किया है। यह चाल मेरे उदाहरण में एक निश्चित चौड़ाई फ़ॉन्ट, कूरियरन्यू का उपयोग करना था।
अपने पृष्ठ कि प्रिंट पुस्तकालयों कॉल में, आप आप सही निर्माता में इस सामग्री का निर्माण कर सकते XAML
<Canvas x:Name="PrintCanvas" Opacity="0"/>
पेज कि PageToPrint के लिए प्रतिस्थापन है में इस की आवश्यकता है,। मैं पेज के इन्स्टेन्शियशन में एक संग्रह गुजरती हैं, और उसके बाद PageToPrint विकल्प नहीं है, इस तरह के लेआउट सही गणना ,,,
private void MakeThePrintOut()
{
RichTextBlock gutOne = initBlock();
PopulateBlock(gutOne);
ContentStack.Children.Add(gutOne);
}
private RichTextBlock initBlock()
{
RichTextBlock gutInitBlock = new RichTextBlock();
gutInitBlock.Foreground = new SolidColorBrush(Windows.UI.Colors.Black);
gutInitBlock.FontSize = 18;
gutInitBlock.OverflowContentTarget = FirstLinkedContainer;
gutInitBlock.FontFamily = new FontFamily("Courier New");
gutInitBlock.VerticalAlignment = VerticalAlignment.Top;
gutInitBlock.HorizontalAlignment = HorizontalAlignment.Left;
return gutInitBlock;
}
private void PopulateBlock(RichTextBlock Blocker)
{
bool firstItem = true;
int firstLength = 0;
Paragraph paraItem = null;
Run itemRun = null;
string CurrentIsle = "None";
foreach(Grocery j in Grocs)
{
if (j.Isle != CurrentIsle)
{
if ((CurrentIsle != "None") && (!firstItem))
{
paraItem.Inlines.Add(itemRun);
Blocker.Blocks.Add(paraItem);
}
CurrentIsle = j.Isle;
firstItem = true;
Paragraph paraIsle = new Paragraph();
Run paraRan = new Run();
paraRan.Text = " " + j.Isle;
paraIsle.Inlines.Add(paraRan);
Blocker.Blocks.Add(paraIsle);
}
if (firstItem)
{
paraItem = new Paragraph();
itemRun = new Run();
itemRun.Text = " [] " + j.Item;
firstLength = j.Item.Length;
firstItem = false;
} else
{
firstItem = true;
string s = new string(' ', 30 - firstLength);
itemRun.Text += s + "[] " + j.Item;
paraItem.Inlines.Add(itemRun);
Blocker.Blocks.Add(paraItem);
}
}
if (!firstItem)
{
paraItem.Inlines.Add(itemRun);
Blocker.Blocks.Add(paraItem);
}
}
यह वास्तव में क्या आप देख रहे हैं नहीं कर रहा है, लेकिन मैं जानता हूँ कि यह कितना मुश्किल है प्रिंटिंग प्रश्न का उत्तर देने के लिए कुछ समझने के लिए। यदि आप पूरा उदाहरण देखना चाहते हैं तो यह मेरे GitHub.com/Gibbloggen GutenbergOne प्रोजेक्ट पर है, मेरा प्रोटोटाइप था कि मैंने यह सामान विकसित किया था। और मैंने अपने मुख्य प्रोजेक्ट EssentialGrocer में भी आयात किया है, यह भी एक ही स्थान पर खुला स्रोत है। वह, आज रात, खरीदारी सूची की छपाई शामिल है।
आशा है कि इनमें से कुछ मदद करता है, मैंने वास्तव में भी इस के साथ संघर्ष किया है।
स्रोत
2016-08-28 02:43:15
शानदार उदाहरण! माइक्रोसॉफ्ट उदाहरण बहुत जटिल हैं। –
मुझे वास्तव में आपका उदाहरण पसंद है, हालांकि जब मैं प्रिंट बटन पर क्लिक करता हूं तो मुझे यह अपवाद मिल रहा है: System.AccessViolationException: 'संरक्षित स्मृति को पढ़ने या लिखने का प्रयास किया गया। यह अक्सर एक संकेत है कि अन्य स्मृति भ्रष्ट है। ' यह त्रुटि printDoc.SetPreviewPage होती है। मुझे इस मुद्दे का समाधान नहीं मिल रहा है, क्या आप जानते हैं कि इसे कैसे हल किया जाए। –
@TravisPettry मैं आपकी तरफ से अपनी समस्या का पुनरुत्पादन नहीं कर सकता। आप कुछ अन्य उपकरणों के साथ परीक्षण करने का प्रयास कर सकते हैं। यदि आपके पास अभी भी यह समस्या है, तो मैं सुझाव दूंगा कि आप एक [mcve] के साथ एक नया प्रश्न पूछें जो आपकी समस्या को पुन: उत्पन्न कर सकता है। –