2015-07-10 112 views
4

我的设计师创造了一个背景图片的风格,它看起来像这样的投入:如何添加背景图片到Xamarin.Forms中的Entry?

enter image description here

我怎么能做到在Xamarin.Forms? 我猜的简单部分是删除边框,但我还需要将其放置在该图像的顶部(我假设使用RelativeLayout?)和最难(以我的观点)将其正确尺寸设置为“填充“剩余的图像。 我使用XAML,但如果你知道在C#中,我可以推断,没有问题。 任何想法?

编辑: 这是我已经设法到目前为止做: enter image description here

代码:

<RelativeLayout> 
    <Image Source="input_selected.png"></Image> 
    <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand"> 
    <Image Source="ico_password.png" Scale="0.7"></Image> 
    <Entry x:Name="PasswordT" Placeholder="Senha" IsPassword="True" HorizontalOptions="CenterAndExpand" Text=""></Entry> 
    </StackLayout> 
</RelativeLayout> 

EDIT2:

<?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="LoginPage" 
      Style="{StaticResource LoginBackground}"> 
    <ScrollView> 
    <RelativeLayout x:Name="RelativeLayoutLogin"> 
     <StackLayout x:Name="BackgroundLayout" Spacing="15" HorizontalOptions="Center" VerticalOptions="Start"> 
     <StackLayout.Padding> 
      <OnPlatform x:TypeArguments="Thickness" iOS="15, 38, 15, 15" Android="15, 18, 15, 15" WinPhone="15, 18, 15, 15" /> 
     </StackLayout.Padding> 
     <StackLayout.Children> 
      <Image Source="logo.png" Aspect="AspectFit" HeightRequest="75"></Image> 
      <Image x:Name="BackgroundBox" Source="box_completo.png" Aspect="AspectFill"></Image> 
     </StackLayout.Children> 
     </StackLayout> 

     <StackLayout RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView, ElementName=BackgroundLayout, Property=Y, Constant=111}" 
        RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToView, ElementName=BackgroundLayout, Property=Width, Factor=1}"> 
     <!--<StackLayout.Padding> 
      <OnPlatform x:TypeArguments="Thickness" iOS="15, 38, 15, 15" Android="15, 18, 15, 15" WinPhone="15, 18, 15, 15" /> 
     </StackLayout.Padding>--> 
     <RelativeLayout> 
      <Image Source="input.png" x:Name="BgUsername"></Image> 
      <Image Source="input_selected.png" x:Name="SelectedBgUsername" IsVisible="False"></Image> 
      <StackLayout RelativeLayout.XConstraint="{ConstraintExpression Type=Constant, Constant=8}" 
        RelativeLayout.YConstraint="{ConstraintExpression Type=Constant, Constant=8}" 
        RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Constant=-16}" 
        RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Constant=-16}" 
        Orientation="Horizontal"> 
      <Image Source="ico_user.png" Scale="0.6"></Image> 
      <Entry x:Name="UsernameOrEmail" Placeholder="Nome de usuário" IsEnabled="True" HorizontalOptions="FillAndExpand" Text="" TextColor="Black"></Entry> 
      </StackLayout> 
     </RelativeLayout> 
     <RelativeLayout> 
      <Image Source="input.png" x:Name="BgPassword"></Image> 
      <Image Source="input_selected.png" x:Name="SelectedBgPassword" IsVisible="False"></Image> 
      <StackLayout RelativeLayout.XConstraint="{ConstraintExpression Type=Constant, Constant=8}" 
         RelativeLayout.YConstraint="{ConstraintExpression Type=Constant, Constant=8}" 
         RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Constant=-16}" 
         RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Constant=-16}" 
         Orientation="Horizontal"> 
      <Image Source="ico_password.png" Scale="0.6"></Image> 
      <Entry x:Name="Password" Placeholder="Senha" IsPassword="True" HorizontalOptions="FillAndExpand" Text="" TextColor="Black"></Entry> 
      </StackLayout> 
     </RelativeLayout> 
     <!--<RelativeLayout Scale="0.85"> 
      <Image Source="input.png" x:Name="BgUsername"></Image> 
      <Image Source="input_selected.png" x:Name="SelectedBgUsername" IsVisible="False"></Image> 
      <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" Padding="15, 5, 0, 0"> 
      <Image Source="ico_user.png" Scale="0.6"></Image> 
      <Entry x:Name="UsernameOrEmail" Placeholder="Nome de usuário" IsEnabled="True" WidthRequest="300" HorizontalOptions="CenterAndExpand" Text="" TextColor="Black"></Entry> 
      </StackLayout> 
     </RelativeLayout> 
     <RelativeLayout Scale="0.85"> 
      <Image Source="input.png" x:Name="BgPassword"></Image> 
      <Image Source="input_selected.png" x:Name="SelectedBgPassword" IsVisible="False"></Image> 
      <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" Padding="10, 5, 0, 0"> 
      <Image Source="ico_password.png" Scale="0.6"></Image> 
      <Entry x:Name="Password" Placeholder="Senha" IsPassword="True" HorizontalOptions="CenterAndExpand" WidthRequest="300" Text="" TextColor="Black"></Entry> 
      </StackLayout> 
     </RelativeLayout>--> 
     <Image x:Name="LoginButtonFm" Style="{StaticResource FmLoginButton}" Scale="0.85"></Image> 
     <Label Text="OU" TextColor="Black" HorizontalOptions="CenterAndExpand"></Label> 
     <Image x:Name="LoginButtonFacebook" Style="{StaticResource FacebookLoginButton}" Scale="0.85"></Image> 
     <Image x:Name="LoginButtonGoogle" Style="{StaticResource GoogleLoginButton}" Scale="0.85"></Image> 
     <Image x:Name="LoginButtonTwitter" Style="{StaticResource TwitterLoginButton}" Scale="0.85"></Image> 
     </StackLayout> 
    </RelativeLayout> 
    </ScrollView> 
</ContentPage> 

谢谢!

回答

7

你绝对是在正确的轨道上。只需要在RelativeLayoutView之一中添加一些限制即可。

<RelativeLayout> 
    <Image Source="input_selected.png"></Image> 
    <StackLayout 
     RelativeLayout.XConstraint="{ConstraintExpression Type=Constant, Constant=8}" 
     RelativeLayout.YConstraint="{ConstraintExpression Type=Constant, Constant=8}" 
     RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Constant=-16}" 
     RelativeLayout.HeightConstraint="{ConstraintExpression Type=Constant, Constant=48}" 
     Orientation="Horizontal"> 
     <Image Source="ico_password.png" Scale="0.7"></Image> 
     <Entry x:Name="PasswordT" Placeholder="Senha" IsPassword="True" HorizontalOptions="FillAndExpand" Text="offspring"></Entry> 
    </StackLayout> 
</RelativeLayout> 

这将定位StackLayout以填充整个RelativeLayout,每边填充8dpx填充。然后因为Entry设置为FillAndExpand,它将占用未被ico_password占用的StackLayout中的所有空间。

+0

谢谢乔尔,但我可能误解了一些东西......这是它插入约束后的样子:http://i.imgur.com/T17J5d2.png正如你所看到的输入不仅推动了图标,但也下降了。 – eestein

+0

@eestein很遗憾听到这个消息没有奏效。它看起来像RelativeLayout可能会占据整个空间,这取决于它的类型是什么类型。如果将它放入StackLayout中,并给它一个HeightRequest和一个与尺寸相匹配的WidthRequest(在dip )的input_selected.png,布局排队更好吗? –

+0

嘿乔尔,请检查EDIT2,这是我的完整代码。我能够使它看起来像这样:http://i.imgur.com/A2hWBwU.png使用填充和缩放,你可以在评论的代码中看到,然后测试你的代码我评论了我的所有改变,所以他们不会弄乱你的解决方案。看到代码有帮助吗? – eestein