【问题标题】:Xamarin Forms - Load image in a ButtonXamarin Forms - 在按钮中加载图像
【发布时间】:2017-10-05 11:57:52
【问题描述】:

我在网上进行了广泛的搜索,但找不到任何真正能帮助我解决我遇到的问题的具体内容。

我正在尝试以 Xamarin 表单为 Button 组件制作自定义渲染器。为什么我不使用 XLabs ImageButton 组件?因为它不兼容 Android 4.0.3,这是我当前的 Android 目标版本。

我还尝试自己编写一些代码,这些代码毫无价值,我很害羞,除非你真的要求我这样做:)

我需要这段代码,因为如果没有它,图像在尝试在任何按钮中使用时无法加载到按钮中:

<Button Image="someImage.png"/>

我尝试按照教程,在这里:

http://blog.falafel.com/learning-xamarin-custom-renderers-in-xamarin-forms/

但我未能使其适应我的需要。

【问题讨论】:

    标签: c# button xamarin custom-renderer


    【解决方案1】:

    根本没有显示图像吗?检查图像的位置。 ios中的默认位置是Resources文件夹,在android中是resources/drawable,在wp中是根目录。如果您想要一个图像而不是每个解决方案的 3 个图像,请放入 PCL 并将构建属性设置为嵌入资源并使用它所在的命名空间限定名称。即... ProjectName.Assets.image.png 如果是在 PCL 资产目录中。不确定这是否是您的问题,但我想我会提供它,以防万一。

    【讨论】:

      【解决方案2】:

      您可以通过使用 TapGestureRecognizer 使图像可点击来解决此问题。对于实施,请通过此:http://www.c-sharpcorner.com/UploadFile/e04e9a/xamarin-forms-image-button-recipe/

      【讨论】:

        【解决方案3】:

        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) 比使用自定义渲染解决一些人建议的问题要简单得多。

        【讨论】:

          猜你喜欢
          • 2016-10-23
          • 2016-09-14
          • 2021-02-24
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 2018-05-13
          • 2020-02-16
          • 2015-10-13
          相关资源
          最近更新 更多