问题描述
我有一个 xamarin 表单应用程序,我想在弹出菜单中添加一个页脚。阅读官方文档后应该很简单,只需在 AppShell.xaml 中添加几行,如下所示:
<Shell.FlyoutFooterTemplate>
<DataTemplate>
<Label HeightRequest="300" BackgroundColor="Red"/>
</DataTemplate>
</Shell.FlyoutFooterTemplate>
当我在一个新项目中尝试它时,这工作得很好,但由于某种原因,它在我当前的应用程序中不起作用,并出现此错误: 错误 XLS0415 在“Shell”类型中找不到可附加属性“FlyoutFooterTemplate”。
我试图找到 FlyoutHeaderTemplate 的定义,我在 Shell [from Metadata] 文件中找到了它: [1]:https://i.stack.imgur.com/xqZub.png
public Shell();
...
public DataTemplate FlyoutHeaderTemplate { get; set; }
public FlyoutHeaderBehavior FlyoutHeaderBehavior { get; set; }
public object FlyoutHeader { get; set; }
Header 和 Footer 应该有一个相似的定义,但 Header 只有一个。该文件无法编辑,我也无法找到它。任何想法为什么缺少页脚的定义,如何添加它或解决方法?
PS:从 C# 代码添加页脚也不起作用,我尝试清理/重建和重置 PC 和 VS。
解决方法
首先,确认您可以添加一个简单的Header:
<Shell.FlyoutHeader>
<Label Text="This is the header." />
</Shell.FlyoutFooter>
如果这不起作用,那么您在做一些根本性的错误 - 发布 <Shell>
XAML 的代码,您在其中添加了这些行。确保包含这些行,以显示它们在 XAML 中的位置。确保它们位于 <Shell>
和 </Shell>
之间,但没有嵌套在某个更深的节点内。例如,它们不得位于 <StackLayout>
或 <ContentView>
或其他容器内 - 它们必须是 <Shell>
的直接子代。
除非您正在做一些奇特的事情,否则您不需要 Template
。
简单地尝试:
<Shell.FlyoutFooter>
<Label HeightRequest="300" BackgroundColor="Red"/>
</Shell.FlyoutFooter>
如果上述 1) 有效,但 2) 无效,则您的项目引用的是过时版本的 Shell
。修正:
A.检查该项目的 Xamarin.Forms nuget
不需要更新。 (解决方案/管理 Nuget。)
B. 或删除 bin
和 obj
文件夹。然后重建解决方案。
C. 最坏的情况,从一个新项目开始,您可以在其中使用该功能,然后重新添加所有文件。