Xamarin Forms - 在按钮中加载图像
Xamarin Forms - Load image in a Button
我在网上广泛查看,但找不到任何真正具体的内容来帮助我解决我遇到的这个问题。
我正在尝试以 Xamarin 形式为 Button 组件制作自定义渲染器。为什么我不使用 XLabs ImageButton 组件?因为它不兼容 Android 4.0.3,这是我当前的 Android 目标版本。
我也尝试过自己编写一些代码,但我很害羞 post,这些代码毫无价值,除非你真的需要我:)
我需要这段代码,因为如果没有它,当尝试在任何按钮中使用图像时,图像将无法加载到按钮中,如下所示:
<Button Image="someImage.png"/>
我尝试按照这里的教程进行操作:
http://blog.falafel.com/learning-xamarin-custom-renderers-in-xamarin-forms/
但是我没能适应我的需要。
完全没有显示图像吗?检查图像的位置。 ios 中的默认位置是 Resources 文件夹,android 中是 resources/drawable,wp 中是根目录。如果每个解决方案想要一张图片而不是 3 张图片,请放入 PCL 并将构建 属性 设置为嵌入式资源,并使用它所在的命名空间限定名称。即... ProjectName.Assets.image.png 如果它在 PCL 资产目录中。不确定这是否是您的问题,但我想我会提供它,以防万一。
您可以通过使用 TapGestureRecognizer 使图像可点击来解决此问题。要实现,请执行以下操作:http://www.c-sharpcorner.com/UploadFile/e04e9a/xamarin-forms-image-button-recipe/
执行此操作的正确方法在 Charles Petzold 关于 Xamarin Forms 的优秀著作的第 13 章中有所描述:https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/
我解决这个问题的方法是(与书中不同)对图像文件路径使用转换器。 Button.Image 属性 是一个 FileImageSource 对象,它需要一个文件路径。不幸的是,您不能在 PCL 中使用嵌入式资源或内容文件。您必须在每个 iOS、Android 和 UWP 项目中添加一个单独的图像文件。我这样做的方法是将图像添加到 PCL 并使用链接(添加现有文件对话框上的选项)。
所以这是我对上述问题的转换器方法
<Button Image="{Binding Converter={StaticResource FileImageSourceConverter}, ConverterParameter=someImage.png}" />
静态资源...
<ContentPage.Resources>
<ResourceDictionary>
<local:FileImageSourceConverter x:Key="FileImageSourceConverter"/>
</ResourceDictionary>
</ContentPage.Resources>
转换器...
public class FileImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string filename = parameter as string;
switch(Device.RuntimePlatform)
{
case Device.iOS:
case Device.Android:
default:
return filename;
case Device.Windows:
return Path.Combine("Images", filename);
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这种方法的优点是 (1) 您的 XAML 不会被 OnPlatform 元素弄得乱七八糟; (2) 你不需要把你的图片放在UWP项目的根目录下; (3) 比使用自定义渲染更简单地解决一些人建议的相同问题。
我在网上广泛查看,但找不到任何真正具体的内容来帮助我解决我遇到的这个问题。
我正在尝试以 Xamarin 形式为 Button 组件制作自定义渲染器。为什么我不使用 XLabs ImageButton 组件?因为它不兼容 Android 4.0.3,这是我当前的 Android 目标版本。
我也尝试过自己编写一些代码,但我很害羞 post,这些代码毫无价值,除非你真的需要我:)
我需要这段代码,因为如果没有它,当尝试在任何按钮中使用图像时,图像将无法加载到按钮中,如下所示:
<Button Image="someImage.png"/>
我尝试按照这里的教程进行操作:
http://blog.falafel.com/learning-xamarin-custom-renderers-in-xamarin-forms/
但是我没能适应我的需要。
完全没有显示图像吗?检查图像的位置。 ios 中的默认位置是 Resources 文件夹,android 中是 resources/drawable,wp 中是根目录。如果每个解决方案想要一张图片而不是 3 张图片,请放入 PCL 并将构建 属性 设置为嵌入式资源,并使用它所在的命名空间限定名称。即... ProjectName.Assets.image.png 如果它在 PCL 资产目录中。不确定这是否是您的问题,但我想我会提供它,以防万一。
您可以通过使用 TapGestureRecognizer 使图像可点击来解决此问题。要实现,请执行以下操作:http://www.c-sharpcorner.com/UploadFile/e04e9a/xamarin-forms-image-button-recipe/
执行此操作的正确方法在 Charles Petzold 关于 Xamarin Forms 的优秀著作的第 13 章中有所描述:https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/
我解决这个问题的方法是(与书中不同)对图像文件路径使用转换器。 Button.Image 属性 是一个 FileImageSource 对象,它需要一个文件路径。不幸的是,您不能在 PCL 中使用嵌入式资源或内容文件。您必须在每个 iOS、Android 和 UWP 项目中添加一个单独的图像文件。我这样做的方法是将图像添加到 PCL 并使用链接(添加现有文件对话框上的选项)。
所以这是我对上述问题的转换器方法
<Button Image="{Binding Converter={StaticResource FileImageSourceConverter}, ConverterParameter=someImage.png}" />
静态资源...
<ContentPage.Resources>
<ResourceDictionary>
<local:FileImageSourceConverter x:Key="FileImageSourceConverter"/>
</ResourceDictionary>
</ContentPage.Resources>
转换器...
public class FileImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string filename = parameter as string;
switch(Device.RuntimePlatform)
{
case Device.iOS:
case Device.Android:
default:
return filename;
case Device.Windows:
return Path.Combine("Images", filename);
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这种方法的优点是 (1) 您的 XAML 不会被 OnPlatform 元素弄得乱七八糟; (2) 你不需要把你的图片放在UWP项目的根目录下; (3) 比使用自定义渲染更简单地解决一些人建议的相同问题。