2009-12-30 17 views
18

मेरे पास TextBlock है ScrollViewer के भीतर जो इसकी खिड़की पर खिंचाव के साथ संरेखित है। मैं TextBlock जरूरत है निम्नलिखित के रूप में व्यवहार करने के लिए:सी # डब्ल्यूपीएफ - स्क्रॉलव्यूयर + टेक्स्टब्लॉक परेशानियां

  • खिड़की के साथ आकार बदलता है, कोई स्क्रॉलबार
  • जब एक निश्चित चौड़ाई नीचे आकृति परिवर्तन TextBlock जरूरतों रखने के लिए एक MinWidth और स्क्रॉलबार दिखाई देनी चाहिए
  • TextWrapping या TextTrimming काम करना चाहिए उचित

मैं इस कार्यक्षमता को कैसे प्राप्त कर सकता हूं?

मैंने ActualWidth & ActualHeight पर बाइंडिंग शामिल करने के कई तरीकों की कोशिश की है, लेकिन इसे काम पर नहीं लाया जा सकता है।

यह मुश्किल नहीं हो सकता है, मुझे क्या याद आ रही है?

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
      <TextBlock TextWrapping="Wrap" Text="Some really long text that should probably wordwrap when you resize the window." /> 
    </ScrollViewer> 
</Window> 
+0

स्पष्टीकरण: क्या स्क्रॉलव्यूवर नियंत्रण के टेम्पलेट में बनाया गया है? या यह नियंत्रण के लिए बाहरी है? –

+0

आप दिखा सकते हैं कि यह उपरोक्त जैसा दिखता है। – jonathanpeppers

उत्तर

23

यह काम करता है:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Name="Scroller"> 
      <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="100" Width="{Binding ElementName=Scroller, Path=ViewportWidth}" 
      TextWrapping="Wrap" Text="Some really long text that should probably wordwrap when you resize the window." /> 
    </ScrollViewer> 
</Window> 
+1

हां, यह एक तरीका है, हालांकि यह लेआउट इंजन को दृश्य पेड़ पर कई बार लूप करने का कारण बन सकता है क्योंकि चौड़ाई बाध्यकारी प्रतिपादन के बाद होती है, जो एक और लेआउट पास को मजबूर करती है। –

+1

क्या कोई और तरीका है? – jonathanpeppers

+0

हां उचित तरीका माप को संशोधित करना और स्क्रॉल व्यूअर, टेक्स्टब्लॉक या कुछ कस्टम तत्वों के बीच तर्क की व्यवस्था करना होगा। मैं अपने मस्तिष्क को इसे समझने की कोशिश कर रहा हूं क्योंकि मैंने उस टिप्पणी को लिखा है, 'मैं इस पर काम कर रहा हूं' :) –

2

और अधिक विस्तार के बिना, सबसे अच्छा मैं कर सकता है ऐसा करने का मानक तरीका प्रदान करते है:

यहाँ एक कोड XamlPad में डालने के लिए नमूना (कोई MinWidth अभी तक सेट कर दिया जाता है)। असल में, स्क्रॉल व्यूअर में अपना तत्व होस्ट करें (जिसमें न्यूनतम आकार है); जब स्क्रॉलव्यूअर का आकार इतना छोटा होता है कि तत्व पूरी तरह फिट नहीं हो सकता है, तो यह स्वचालित रूप से स्क्रॉल बार प्रदर्शित करेगा। उदाहरण:

<ScrollViewer> 
    <Button MinWidth="100" MinHeight="50"/> 
</ScrollViewer> 
+0

हम्म, यह XamlPad में काम करता है, लेकिन मेरे आवेदन में नहीं। मुझे पता लगाने के लिए कुछ खुदाई करना होगा क्यों। – jonathanpeppers

+0

ऐसा इसलिए है क्योंकि मेरा नियंत्रण टेक्स्टब्लॉक है। ऊपर मेरा संपादन देखें। – jonathanpeppers

+0

आप जिस व्यवहार को हासिल करने की कोशिश कर रहे हैं वह वास्तव में क्या है? जब आप 'टेक्स्टब्लॉक' पर 'मिनविड्थ' और 'मिनहेइट' सेट करते हैं तो यह काम करना चाहिए। –

0

आप और अधिक जटिल लेआउट और जवाब https://stackoverflow.com/a/41281041/254109 मदद मिल सकती में तो ScrollViewerIgnoreWidthControl करने के लिए बाध्य नहीं कर सकता।