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");
}
}
}
}
我正在使用来自 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");
}
}
}
}