2016-06-16 3 views
14

मैं Style का उपयोग कर RelativeLayout पर बाधाओं को लागू करने के लिए XAML वाक्यविन्यास को काम करने के लिए संघर्ष कर रहा हूं।Xamarin XAML में, मैं स्टाइल का उपयोग कर रिलेटिवलाउट पर एक बाधा कैसे सेट करूं?

नीचे एक्समरिन एक्सएएमएल का पहला टुकड़ा नेस्टेड RelativeLayout तत्वों की एक जोड़ी को एक साधारण लेआउट बनाने के लिए उपयोग किया जाता है (आंतरिक तत्व केवल उस क्षेत्र के चारों ओर एक मार्जिन डालता है जिसमें मैं अन्य सामग्री जोड़ सकता हूं)। कोड का यह संस्करण आईओएस और एंड्रॉइड पर ठीक बनाता है और चलाता है।

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="App2.Page1"> 
    <RelativeLayout BackgroundColor="Gray"> 
     <RelativeLayout BackgroundColor="Maroon" 
      RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent,Property=Height,Factor=0.9,Constant=0}" 
      RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=0.9,Constant=0}" 
      RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Height,Factor=0.05,Constant=0}" 
      RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=0.05,Constant=0}"> 
      <BoxView Color="Yellow" 
       RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent,Property=Height,Factor=0.25,Constant=0}" 
       RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=0.25,Constant=0}" 
       RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Height,Factor=0.25,Constant=0}" 
       RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=0.25,Constant=0}"/> 
     </RelativeLayout> 
    </RelativeLayout> 
</ContentPage> 

मैं इसे एकाधिक पृष्ठों पर एक ही लेआउट का उपयोग करना चाहते हैं क्या, तो मैं एक Style में RelativeLayout बाधाओं रखना चाहते हैं। कोड का यह दूसरा भाग पार्स या रन नहीं करता है, लेकिन मुझे उम्मीद है कि यह दिखाता है कि मैं क्या हासिल करने की कोशिश कर रहा हूं। अगर मैं इसके लिए सही वाक्यविन्यास प्राप्त कर सकता हूं, तो विचार यह है कि Style को साझा फ़ाइल में स्थानांतरित किया जा सकता है, इसलिए मैं ContentPage के कई उदाहरणों में आसानी से इसका उपयोग कर सकता हूं।

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="App2.Page2"> 
    <ContentPage.Resources> 
     <ResourceDictionary> 
      <Style x:Key="LayoutStyle" TargetType="RelativeLayout"> 
       <Setter Property="BackgroundColor" Value="Maroon"/> 
       <Setter Property="HeightConstraint"> 
        <Setter.Value>"Type=RelativeToParent,Property=Height,Factor=0.9,Constant=0"</Setter.Value> 
       </Setter> 
       <Setter Property="WidthConstraint"> 
        <Setter.Value>"Type=RelativeToParent,Property=Width,Factor=0.9,Constant=0"</Setter.Value> 
       </Setter> 
       <Setter Property="YConstraint"> 
        <Setter.Value>"Type=RelativeToParent,Property=Height,Factor=0.05,Constant=0</Setter.Value> 
       </Setter> 
       <Setter Property="XConstraint"> 
        <Setter.Value>"Type=RelativeToParent,Property=Width,Factor=0.05,Constant=0</Setter.Value> 
       </Setter> 
      </Style> 
     </ResourceDictionary> 
    </ContentPage.Resources> 
    <RelativeLayout BackgroundColor="Gray"> 
     <RelativeLayout Style="LayoutStyle"> 
      <BoxView Color="Yellow" 
       RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent,Property=Height,Factor=0.25,Constant=0}" 
       RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=0.25,Constant=0}" 
       RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,Property=Height,Factor=0.25,Constant=0}" 
       RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent,Property=Width,Factor=0.25,Constant=0}"/> 
     </RelativeLayout> 
    </RelativeLayout> 
</ContentPage> 

कृपया कोई भी ऐसा करने के लिए वाक्यविन्यास के साथ मेरी सहायता कर सकता है? इस प्रयास करें XAML Layout Example

उत्तर

7

:

<ResourceDictionary> 
    <Style x:Key="LayoutStyle" TargetType="RelativeLayout"> 
     <Setter Property="BackgroundColor" Value="Maroon"/> 
     <Setter Property="RelativeLayout.HeightConstraint" Value="{ConstraintExpression RelativeToParent,Property=Height,Factor=0.9,Constant=0}"/> 
     <Setter Property="RelativeLayout.WidthConstraint" Value="{ConstraintExpression RelativeToParent,Property=Width,Factor=0.9,Constant=0}"/> 
     <Setter Property="RelativeLayout.YConstraint" Value="{ConstraintExpression RelativeToParent,Property=Height,Factor=0.05,Constant=0}"/> 
     <Setter Property="RelativeLayout.XConstraint" Value="{ConstraintExpression RelativeToParent,Property=Width,Factor=0.05,Constant=0}"/> 
    </Style> 
</ResourceDictionary> 
+0

धन्यवाद

यह (पुनर्स्थापित करने के लिए जो स्पष्ट रूप से की आवश्यकता है Xamarin स्थापित होने के लिए और nuget संकुल की जरूरत है) पूर्ण उदाहरण के लिए एक कड़ी है। यह वास्तव में निर्माण और चलाता है; हालांकि, मुझे लगता है कि Xamarin लेआउट मॉडल में एक बग हो सकता है क्योंकि जब मैं बाधा को स्टाइल में ले जाता हूं तो मुझे असंगत व्यवहार मिलता है। यह सीएसएस की तरह नहीं है, क्या यह है, जिससे नियम को स्टाइल में ले जाना एल्गोरिदम में अपना स्कोर कम करता है जो तय करता है कि क्या आवेदन करना है? मैं इसे एक्समारिन के साथ एक बग के रूप में उठाने जा रहा हूं। – Patrick

+0

तत्व पर एक अलग सेटिंग इनलाइन प्रदान करके शैली में सेट गुणों को ओवरराइड करना संभव है, लेकिन नियम सीएसएस के मुकाबले बहुत सरल हैं। हालांकि Xamarin.Forms लेआउट के लिए पर्याप्त जानकारी निर्दिष्ट नहीं करने के लिए काफी संवेदनशील है, जो असंगत व्यवहार के रूप में प्रकट होता है। चूंकि यह उत्तर मूल प्रश्न को संबोधित करता है, इसलिए कृपया इसे स्वीकृत उत्तर के रूप में चिह्नित करें। लेआउट के साथ क्या चल रहा है, यह पता लगाने के लिए, Xamarin के साथ एक बग दर्ज करने के अलावा, आप अपने पृष्ठ के दो संस्करणों के स्क्रीनशॉट के साथ एक और प्रश्न भी पूछ सकते हैं। – DavidS

+0

मेरी गलती। मैं खुद को लात मार सकता था। ऊपर दिखाए गए स्टाइल को लागू करने का प्रयास करते समय, मैं विनिर्देशक में '{StaticResource ...}' डालना भूल गया। तो, 100% स्पष्ट होने के लिए, @ डेविड द्वारा उत्तर पूरी तरह से सही है और पूरी तरह से काम करता है। फिर से धन्यवाद। – Patrick

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