Xamarin.Forms ImageSource = Device.OnPlatform 已过时

Xamarin.Forms ImageSource = Device.OnPlatform obsolete

我正在使用来自 Xamarin 的一个名为 "TableView for a form" 的示例来测试一个应用程序,并遇到了一个过时的部分,ImageSource = Device.OnPlatform 现在被一个 switch 语句取代。这里没有问题,但是有很多信息,我有一个特殊的问题,看不到问题。

我正在添加的代码目前在下面的源代码中被注释掉了,并且可以通过这种方式正常编译,当然没有图像。如果我删除注释部分,我会在第 35 行收到错误,缺少 }。 如果我突出显示最后一个分隔符下方的花括号,它就会知道它的匹配项 switch()。如果我突出显示其正下方的左花括号,它认为它是顶部 Public SearchPage() 的一部分。 开关中的某些东西导致了问题,但我就是看不到它。

我希望有人 运行 对此有所了解并且可能有答案。如果您需要更多详细信息,请告诉我。

using System;
using System.Collections.Generic;
using System.Text;

using Xamarin.Forms;
//using static System.Net.Mime.MediaTypeNames;

namespace MiddleMeeter
{
    class SearchPage : ContentPage
    {
        public SearchPage()
        {
            Label header = new Label
            {
                Text = "TableView for a form",
                FontSize = 30,
                FontAttributes = FontAttributes.Bold,
                HorizontalOptions = LayoutOptions.Center
            };

            TableView tableView = new TableView
            {
                Intent = TableIntent.Form,
                Root = new TableRoot("TableView Title")
                {
                    new TableSection("Table Section")
                    {
                        new TextCell
                        {
                            Text = "Text Cell",
                            Detail = "With Detail Text",
                        },
                        new ImageCell
                        {   
                            /**********************************************************************************************
                            switch (Device.RuntimePlatform)
                            {
                                case Device.iOS:
                                ImageSource.FromUri(new Uri("http://xamarin.com/images/index/ide-xamarin-studio.png"));
                                    break;
                                case Device.Android:
                                    ImageSource.FromFile("waterfront.jpg");
                                    break;
                                case Device.WinPhone:
                                    ImageSource.FromFile("Images/waterfront.jpg");
                                    break;
                                default:
                                    ImageSource.FromFile("Images/waterfront.jpg");
                                    break;
                            },
                            *///////////////////////////////////////////////////////////////////////////////////////////////

                            Text = "Image Cell",
                            Detail = "With Detail Text",
                        },
                         new SwitchCell
                        {
                            Text = "Switch Cell"
                        },
                        new EntryCell
                        {
                            Label = "Entry Cell",
                            Placeholder = "Type text here"
                        },
                        new ViewCell
                        {
                            View = new Label
                            {
                                Text = "A View Cell can be anything you want!"
                            }
                        }
                    },
                }
            };

            // Build the page.
            this.Content = new StackLayout
            {
                Children =
                {
                    header,
                    tableView
                }
            };
        }
    }
}

我认为 c# 不支持像这样的对象初始值设定项中的 switch 语句。解决此问题的最佳方法是将 switch 语句重构为一个方法并使用它来初始化 ImageCell.

ImageSource GetSource()
{
    switch (Device.RuntimePlatform)
    {
        case Device.iOS:
            return ImageSource.FromUri(new Uri("http://xamarin.com/images/index/ide-xamarin-studio.png"));
        case Device.Android:
            return ImageSource.FromFile("waterfront.jpg");
        case Device.WinPhone:
            return ImageSource.FromFile("Images/waterfront.jpg");
        default:
            return ImageSource.FromFile("Images/waterfront.jpg");
    }
}

并在初始化器中使用它:

new ImageCell
{   
    ImageSource = GetSource()
}

已回答:谢谢 Scryptique

我想 post 我正在使用的确切代码来替换 Xamarin 为 Forms Gallery 提供的示例 --> 'TableView for a form'.

using System;
using System.Collections.Generic;
using System.Text;

using Xamarin.Forms;
//using static System.Net.Mime.MediaTypeNames;

namespace MiddleMeeter
{
    class SearchPage : ContentPage
    {
        public SearchPage()
        {
            Label header = new Label
            {
                Text = "TableView for a form",
                FontSize = 30,
                FontAttributes = FontAttributes.Bold,
                HorizontalOptions = LayoutOptions.Center
            };

            TableView tableView = new TableView
            {
                Intent = TableIntent.Form,
                Root = new TableRoot("TableView Title")
                {
                    new TableSection("Table Section")
                    {
                        new TextCell
                        {
                            Text = "Text Cell",
                            Detail = "With Detail Text",
                        },
                        new ImageCell
                        {
                            // This is the call to method getSource() 
                            ImageSource = getSource(),
                            Text = "Image Cell",
                            Detail = "With Detail Text",
                        },
                         new SwitchCell
                        {
                            Text = "Switch Cell"
                        },
                        new EntryCell
                        {
                            Label = "Entry Cell",
                            Placeholder = "Type text here"
                        },
                        new ViewCell
                        {
                            View = new Label
                            {
                                Text = "A View Cell can be anything you want!"
                            }
                        }
                    },
                }
            };

            // Build the page.
            this.Content = new StackLayout
            {
                Children =
                {
                    header,
                    tableView,
                }
            };


        }

        // Method to get the format to retreive the image for Platform specific detaisl
        private ImageSource getSource()
        {
            switch (Device.RuntimePlatform)
            {
                case Device.iOS:
                    return ImageSource.FromUri(new Uri("https://www.xamarin.com/content/images/pages/branding/assets/xamagon.png"));
                case Device.Android:
                    return ImageSource.FromFile("Icon.png");
                case Device.WinPhone:
                    return ImageSource.FromFile("Images/waterfront.jpg");
                default:
                    return ImageSource.FromFile("Images/waterfront.jpg");
            }
        }
    }
}