2016-12-30 13 views
6

यहां xaml (स्टैकलेआउट में एक छवि) है। सब कुछ तार्किक है: मैं AspectFit और क्षैतिज विकल्प को भरने और एक्सपैंड करने के लिए पहलू सेट करता हूं। छवि की चौड़ाई स्टैकलेआउट की चौड़ाई भरनी होगी। छवि पहलू के लिए ऊंचाई की गणना की जानी चाहिए।एक्समरिन फॉर्म छवि उचित चौड़ाई के साथ चौड़ाई चौड़ाई

<Image BackgroundColor="Fuchsia" 
     Aspect="AspectFit" 
     Source="{Binding GroupLogo}" 
     HorizontalOptions="FillAndExpand" 
     VerticalOptions="FillAndExpand"/> 

यह चौड़ाई भरता है लेकिन यह छवि पूर्ण चौड़ाई नहीं खींचना चाहता है। क्यूं कर?

enter image description here

+0

उपयोग AspectFit –

+1

@JayPatel के बजाय AspectFill यह छवि –

उत्तर

7

AspectFit करता है कि वह क्या कहते हैं टिन पर, यह दृश्य है, जो दृश्य खाली के कुछ हिस्सों को छोड़ सकते में पूरी छवि फिट होगा। Xamarin के दस्तावेज़ से सीधे:

दृश्य को फिट करने के लिए छवि को स्केल करें। कुछ हिस्सों को खाली छोड़ दिया जा सकता है (पत्र मुक्केबाजी)।

स्केल छवि देखने को भरने के लिए:

आप देख रहे हैं क्या AspectFill, जो छवि फिट करने के लिए पैमाने पर होगा। दृश्य को भरने के लिए कुछ हिस्सों को फिसल दिया जा सकता है।

यदि आप छवि दृश्य की छवि होने के लिए छवि दृश्य प्राप्त करने का प्रयास कर रहे हैं, तो मैं छवि की ऊंचाई पर HeightRequest जोड़ने का सुझाव दूंगा। मेरे नियंत्रण में छवि नियंत्रण स्वचालित रूप से Xamarin में स्केल नहीं लग रहा है, क्योंकि देशी नियंत्रण डिफ़ॉल्ट रूप से इसका समर्थन करने के लिए प्रकट नहीं होते हैं।

<grid> 
    <image></image> 
</grid> 

मैं कभी-कभी जब:

Reference

+0

आप कर रहे हैं क्या कट जाएगा करने के लिए कोड की इस पंक्ति जोड़ें MainActivity.xaml एस्पेक्टफिल (सी) नहीं है, मैं छवि को काटना नहीं चाहता हूं। मैं चाहता हूं कि यह चौड़ाई भरें और उस ऊंचाई को रखें जो किसी छवि के पहलू को बचाने के लिए आवश्यक है। मैं उसे कैसे कर सकता हूँ? ऊंचाई अनुरोध एक विकल्प नहीं है। मुझे नहीं पता कि मुझे कौन सी छवि मिलेगी –

+0

जैसा कि मैंने कहा था, देशी नियंत्रण एक्सएफ एक्सएएमएल में कस्टम रेंडर किए गए कार्यान्वयन के बिना ऐसा नहीं कर रहा है (यह संभव है कि आईओएस/एंड्रॉइड पर कुछ मूल परिवर्तनों का उपयोग करना संभव नहीं है) पूरा करने में आसान है। मैं सुझाव दूंगा कि आप जहां से अपनी छवि प्राप्त करेंगे, वहां एक और बाध्यकारी संपत्ति भी प्रदान की जा सकती है जो छवि की ऊंचाई प्राप्त करती है। किसी बिंदु पर आपके पास छवि लोड करने के लिए पहुंच है और इस प्रकार इसकी गुण प्राप्त होती है। –

0

stacklayout की heightrequest या तो StartAndExpand या FillAndExpand या EndAndExpand आदेश स्वचालित रूप से ऊंचाई को समायोजित करने के लिए

+0

फिर भी एक ही परिणाम <छवि स्रोत = "{बाइंडिंग GroupLogo}" VerticalOptions = "StartAndExpand" HorizontalOptions = "FillAndExpand" पहलू = "AspectFit" /> –

+0

बनाओ StartAndExpand या FillAndExpand को ढेर लेआउट के heightsrequest या EndAndExpand नहीं छवि –

1

की तरह एक ग्रिड के अंदर inclosing छवि का प्रयास किया जाना चाहिए एक छवि जो ठीक से आकार बदल नहीं रही है, इसे ग्रिड के अंदर घेरने से समस्या हल हो जाती है।

+0

की ऊंचाई अनुरोध यह –

+0

में मदद नहीं करता है यह मेरे लिए काम करता है, स्केल के लिए विशिष्ट मान नोट करें: '<ग्रिड क्षैतिज विकल्प =" केंद्र और एक्सपैंड "><छवि स्रोत =" logo.jpg "स्केल =" 1.0 "पहलू =" AspectFit "/> ' – PaulD

2

जैसा कि मुझे कोई कामकाजी उदाहरण नहीं मिला है। यह मेरे लिए पूरी तरह से काम करता है:

<Grid VerticalOptions="FillAndExpand"> 
     <ImageSource="{Binding ImageSrc}" Aspect = "AspectFill"/> 
</Grid> 
2

मुझे एक ही समस्या थी। जब संभव हो तो मैं स्टैकलेआउट की चौड़ाई और ऊंचाई को भरना चाहता था लेकिन वास्तविक छवि को फसल के बिना। यहां दिए गए उत्तरों ने मुझे सही तरीके खोजने में मदद की है। यहां मेरे लिए क्या काम किया गया है:

  <Grid 
       HorizontalOptions="FillAndExpand" 
       VerticalOptions="FillAndExpand" 
       > 
       <Image 
        x:Name="photo"       
        Aspect="AspectFit"      
       /> 
      </Grid> 

शायद यह किसी के लिए उपयोग किया जाएगा।

स्पष्टीकरण:

HorizontalOptions और VerticalOptions मूल्य FillAndExpand साथ हैं, इसलिए ऊंचाई और ग्रिड की चौड़ाई माता-पिता को भरने के लिए, इस मामले Stacklayout है कि में समायोजित कर रहे हैं। छवि ग्रिड का एक बच्चा है, इसलिए यह माता-पिता के अनुसार बदलता है (हमने छवि को कोई अतिरिक्त विकल्प नहीं दिया है)।

छवि का पहलू AspectFit पर सेट किया गया है, ताकि छवि दृश्य (इस मामले में ग्रिड) फिट हो और इसके अनुपात को भी संरक्षित करे।

इस तरह, यदि छवि पोर्ट्रेट मोड में है लेकिन बहुत संकीर्ण है, तो यह ग्रिड (स्टैकलायआउट) की ऊंचाई को भर देगा, लेकिन इसके अनुपात को संरक्षित करने के लिए चौड़ाई नहीं भर जाएगी और ऊपर या नीचे से नहीं फसल जाएगी ।

यदि छवि लैंडस्केप मोड में है, तो यह ग्रिड (स्टैकलेआउट) की चौड़ाई भर जाएगी, लेकिन इसके अनुपात को संरक्षित करने के लिए ऊंचाई को भर नहीं पाएगी और बाएं या दाएं से नहीं फेंक दी जाएगी।

+0

यह काम करता है! पर क्यों? – brundaged

+0

हाय @brundaged, बहुत देर से उत्तर के लिए खेद है। मैंने कोड में कुछ स्पष्टीकरण जोड़ा है। – Sonia

0

MyPage.xaml

<StackLayout HorizontalOptions="FillAndExpand" 
      VerticalOptions="FillAndExpand" 
      Padding="0"> 
    <ff:CachedImage Source="{Binding GroupLogo}" 
        HorizontalOptions="Fill" 
        VerticalOptions="Fill" 
        Aspect="Fill" 
        DownsampleToViewSize="True"/> 
</StackLayout> 

FFImageLoading NuGet पैकेज से CachedImage उपयोग करने का प्रयास यह परिणाम छवि की कोशिश कर रहा क्षैतिज कंटेनर को भरने और जबकि इसकी पहलू को बनाए रखने के लिए स्वचालित रूप से चौड़ाई उत्पन्न करने के लिए होगा।

के बाद global::Xamarin.Forms.Forms.Init(this, bundle);

CachedImageRenderer.Init(true); 

उदाहरण पाया जा सकता है here

संबंधित मुद्दे