6

previous question में मैं यह पता लगाने की कोशिश कर रहा था कि एक अवलोकन करने योग्य चयन को नियंत्रण में कैसे बांधें ताकि मैं दोनों तारों को देख सकूं और सभी तारों का चयन कर सकूं और उन्हें सामग्री नियंत्रण से कॉपी कर सकूं। अंततः उस प्रश्न के उत्तर ने मुझे निम्नलिखित एक्सएएमएल का उपयोग करके देखना (और प्रतीत होता है कि व्यवहार) मिला। (मैंने कोशिश की दोनों एक FlowDocumentReader और FlowDocumentScrollViewer - वे एक ही व्यवहार करते हैं।)मैं WPF FlowDocumentScrollViewer या Reader से कॉपी किए गए टेक्स्ट को पेस्ट क्यों नहीं कर सकता?

<Grid> 
<FlowDocumentScrollViewer> 
    <FlowDocument > 
     <Paragraph> 
      <ItemsControl ItemsSource="{Binding ErrorMessages, Mode=OneWay}" /> 
      <Run Text="{Binding /, Mode=OneWay}" /> 
     </Paragraph> 
    </FlowDocument> 
</FlowDocumentScrollViewer> 
</Grid> 

ErrorMessages मेरी ViewModel संपत्ति है कि एक ObservableCollection < स्ट्रिंग> देता है। यह आइटमसोर्स और < रन> तत्व संग्रह में प्रत्येक स्ट्रिंग के लिए बाध्यता से ठीक से बांधता है। अच्छा लग रहा है, लंबे समय तक रहता है। यह बहुत करीब था मैंने उत्तर के रूप में अपना अंतिम प्रश्न चिह्नित किया लेकिन मुझे अभी भी एक समस्या है।

मैं सही क्लिक करें और एक मेनू चयन युक्त सभी और कॉपी विकल्प दिखाई देता है। का उपयोग करके सभी का चयन करें, वास्तव में त्रुटियों को चुनने के लिए सभी टेक्स्ट को हाइलाइट करते हैं, लेकिन जब मैं नोटपैड (या वर्ड, या टेक्स्टपैड इत्यादि या फॉर्म पर आरटीबी) पर जाता हूं और टेक्स्ट पेस्ट करने का प्रयास करता हूं, कुछ भी नहीं कभी दिखाता है डब्ल्यूपीएफ के नवागंतुक के रूप में मुझे संदेह है कि मैं कुछ गलत कर रहा हूं लेकिन मुझे नहीं पता कि यह क्या है। ऐसी कोई चीज़ नहीं है जैसे "लापरवाह" पाठ है?

[संपादित करें -ज्यून 22 2011] अन्य कारणों से मैंने नीचे दिए गए अनुसार आइटम कंट्रोल के अंदर एक आइटम टेम्पलेट के माध्यम से टेक्स्टब्लॉक का उपयोग करने के लिए कोड बदल दिया है, लेकिन मैं अभी भी कॉपी और पेस्ट नहीं कर सकता।

<DataTemplate x:Key="StringCollection"> 
    <TextBlock TextWrapping="Wrap" Text="{Binding}" TextAlignment="Left"/> 
</DataTemplate> 
<!--... now down in the ItemsControl--> 
<ItemsControl ItemsSource="{Binding ReceivedData, Mode=OneWay}" 
     ItemTemplate="{StaticResource StringCollection}" /> 
+0

आप क्लिपबोर्ड का निरीक्षण कर सकते हैं (एक ['क्लिपबोर्ड'] है (http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx) कक्षा में .Net) ठीक बाद में * प्रतिलिपि * और जांचें कि इसमें टेक्स्ट है और अन्य डेटा प्रकारों की प्रतिलिपि बनाई गई है या नहीं। –

+0

ठीक है - जब मैं GetFormats() को कैप्चर करता हूं तो यह Xaml, ApplicationTrust, Text, UnicodeText, System.String, Rich Text Format दिखाता है। जब मैं GetDataPresent (DataFormats.Text) की जांच करता हूं और यह गुजरता है तो मैंने "गॉट टेक्स्ट:" प्रदर्शित किया है, इसके बाद क्लिप_टेक्स्ट में वास्तविक क्लिपबोर्ड टेक्स्ट के बाद क्लिप_टेक्स्ट। लम्बाई() मिला टेक्स्ट: 4 जहां बीच कुछ भी नहीं था पाठ मिला: और 4 अगली पंक्ति पर था। इसका क्या अर्थ है? 4 गैर-प्रदर्शित करने योग्य वर्ण जिनमें से एक नई लाइन है?चयनित वास्तविक डेटा और प्रतिलिपि तीन तार नकली त्रुटि 1 नकली त्रुटि 2 मैन्युअल रूप से InstrumentViewModel में जोड़ा गया था। – Tod

उत्तर

3

<Run> तत्व संग्रह में प्रत्येक स्ट्रिंग को बांधता है।

यह केवल कुछ भी होने पर वर्तमान तत्व से जुड़ना चाहिए।

वैसे भी, आपके दस्तावेज़ में वास्तव में कोई टेक्स्ट नहीं है यदि आपके पास आइटम कंट्रोल है। क्यूं कर? चूंकि दस्तावेज़ के अंदर कोई UIElements स्वचालित रूप से BlockUIContainer या InlineUIContainer में लपेटा जाता है और इसे अब टेक्स्ट नहीं माना जाता है।

सामान्य में सामग्री XAML, आरटीएफ, UnicodeText के रूप में कॉपी किया जाता है & पाठ (मैं उन का पालन कर सकता है, लेकिन वहाँ अन्य प्रारूपों हो सकता है), आप अपने दस्तावेज़ में कुछ Runs देने का प्रयास कर सकते हैं, उनके पाठ ठीक से कॉपी किया जाना चाहिए और Clipboard.GetText() अपनी सामग्री वापस करनी चाहिए।

+0

मुझे समझ में नहीं आता है, जब आप कहते हैं कि "आपका दस्तावेज़ वास्तव में कोई भी टेक्स्ट नहीं रखता है"। ऐसा लगता है कि इसमें टेक्स्ट है। मैं इसे देख सकता हूं, और मैं इसे चुन सकता हूं। यदि आपने दूसरे पुनरावृत्ति में ध्यान नहीं दिया तो मैंने टेक्स्टब्लॉक का उपयोग किया लेकिन व्यवहार वही था। भले ही मुझे यकीन नहीं है कि आप क्या सुझाव दे रहे हैं। मैं मूल रूप से था और यह काम नहीं किया। मदद करने के लिए और अधिक रनों को कैसे रखा जा रहा है? मेरे पास संदेशों की संभावित रूप से बदलती संख्या है और मैं उन्हें प्रदर्शित करना चाहता हूं (जैसा दिखाया गया है) लेकिन मैं उन्हें क्लिपबोर्ड पर कॉपी करना चाहता हूं। मुझे क्या बदलना चाहिए? – Tod

+1

किसी भी तरह से मेरा संदेश मेरे इनबॉक्स में खो गया है। वैसे भी, टेक्स्टब्लॉक या तो टेक्स्ट नहीं हैं, वे UIElements भी हैं जो कंटेनरों में लपेटे जाते हैं और उन्हें टेक्स्ट की तरह नहीं माना जाता है। मेरा सुझाव है कि आप इस पर एक पूरी तरह से अलग दृष्टिकोण लेते हैं, जैसा कि मैंने [आपके पिछले प्रश्न के उत्तर] [http://stackoverflow.com/posts/6339441/edit) में सुझाए गए तारों को संयोजित करने की तरह, तो आप एक एकल ' उस पाठ को प्रदर्शित करने के लिए 'चलाएं'। –

+0

आगे, भले ही आइटम नियंत्रण की वस्तुएं [प्रवाह सामग्री] (http://msdn.microsoft.com/en-us/library/ms753113.aspx) (जो संभव नहीं है), फिर भी आपके पास आइटम नियंत्रण होगा जो एक कंटेनर में लपेटा जाएगा उन प्रयासों को व्यर्थ बनाते हैं। –