【发布时间】:2021-04-11 13:06:19
【问题描述】:
我的 Xam.Forms 项目中有一个轮播视图。我还创建了 3 个 ContentViews(每个 DataTemplate 一个)。我的模板选择器类看起来像这样
public class DashboardTemplateSelector : DataTemplateSelector
{
public DataTemplate QuickMessageTemplate { get; set; }
public DataTemplate DataViewTemplate { get; set; }
public DataTemplate LastUsedTemplate { get; set; }
public DashboardTemplateSelector()
{
QuickMessageTemplate = new DataTemplate(typeof(QuickMessage));
DataViewTemplate = new DataTemplate(typeof(DataView));
LastUsedTemplate = new DataTemplate(typeof(LastusedView));
}
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
var cv = (Frame)item;
DataTemplate rv = null;
switch(cv.ClassId)
{
case "data":
rv = DataViewTemplate;
break;
case "quick":
rv= QuickMessageTemplate;
break;
case "last":
rv = LastUsedTemplate;
break;
}
return rv;
}
没有什么特别的,我在 ContentView 中的每个框架上都设置了 ClassId,以匹配开关中的名称。
当我构建应用程序并运行它时,它看起来很好,但 CarouselView 中没有任何内容,并且在 OnSelectTemplate 方法(第一行)中设置的断点从未被命中。
我的轮播视图的 XAML 是这个
<ContentPage.Resources>
<ResourceDictionary>
<local:DashboardTemplateSelector x:Key="templateSelector" />
</ResourceDictionary>
</ContentPage.Resources>
<CarouselView Grid.Row="2" PeekAreaInsets="12" Margin="8" ItemTemplate="{StaticResource templateSelector}" HeightRequest="200" BackgroundColor="BlueViolet" />
视图显示(可以看到背景颜色)但视图本身没有任何内容。
我只在物理 android 设备上而不是在 iOS 上检查过这个,但我猜同样的结果。我的猜测是我无法将对象转换为 Frame,但我不确定。
【问题讨论】:
标签: xamarin xamarin.forms