Xaml 带有图像Xamarin.Forms的按钮

Xaml 带有图像Xamarin.Forms的按钮,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,我正在用Xamarin.Forms开发一个跨pltform应用程序。我想制作一个带有图像的按钮,但我不知道如何指定图像的路径。当我使用此注释时,它会起作用: <Button Text="Naviga tra i Piani del Museo" Image="foo.png"/> 但当我的图像位于某些文件夹(folder1/folder2)中时,以下代码不起作用: <Button Text="Naviga tra i Piani del Museo" Image="fol

我正在用Xamarin.Forms开发一个跨pltform应用程序。我想制作一个带有图像的按钮,但我不知道如何指定图像的路径。当我使用此注释时,它会起作用:

<Button Text="Naviga tra i Piani del Museo" Image="foo.png"/>

但当我的图像位于某些文件夹(folder1/folder2)中时,以下代码不起作用:

<Button Text="Naviga tra i Piani del Museo" Image="folder1/folder2/foo.png"/>


那么,如何正确指定图像的路径呢?

您不能将图像嵌套在文件夹中。iOS和Android希望它们是资源,WP希望它们位于应用程序的根文件夹中


Xamarin表单文档中有一节介绍

您应该在OnPlatform标记中指定按钮的图像属性,以便为每个平台提供不同的路径。这是长方体视图的示例,您可以为按钮图像属性尝试相同的方法

<BoxView HorizontalOptions="Center">
      <BoxView.Color>
        <OnPlatform x:TypeArguments="Color" 
          iOS="Green" 
          Android="#738182" 
          WinPhone="Accent" />
      </BoxView.Color>
      <BoxView.WidthRequest>
        <OnPlatform x:TypeArguments="x:Double" 
          iOS="30" 
          Android="40" 
          WinPhone="50" />
      </BoxView.WidthRequest>
 </BoxView>

使用PCL保持图像公用是一项困难的任务。 所以要分开做


请记住,在android项目中,您必须将图像复制到Resources>drawable。

以使用Xamarin的文件夹。表单项目这对我来说很有用

您需要将资源(本例中为图像文件)放入Xamarin.Form项目中的文件夹(本例中的文件夹称为“资产”),并将构建操作设置为“内容”

其次,要让资源与Android协同工作,您需要将文件放在Android项目中的resources>drawable文件夹中(在这里您不能使用任何文件夹),设置构建操作“AndroidResource”



请注意,对于iOs,您需要使用“/”创建路径;对于WinPhone/UWP,您需要使用“\”

创建路径。因此,如果您有100个图像,您可以将它们全部放在同一个文件夹中?不幸的是,我认为这就是XF当前状态的答案。希望将来会更灵活。
<ContentPage.Resources>
    <ResourceDictionary>
        <OnPlatform x:Key="StartButtonImage" 
                    x:TypeArguments="FileImageSource"
                    Android="button_image.png"
                    WinPhone="Assets\button_image.png"
                    iOS="Assets/button_image.png"/>
    </ResourceDictionary>
</ContentPage.Resources>


<ContentPage.Content>
    <Grid>
        <Button Image="{StaticResource StartButtonImage}" BackgroundColor="Transparent"/>
    </Grid>
</ContentPage.Content>