我想使Global Toolbar可以在我的整个应用程序中访问。我正在使用MVVM模式。
我已经在我的app.xaml中尝试过:
<Application.Resources>
<ResourceDictionary>
<ContentPage x:Key="BoloTool">
<ContentPage.ToolbarItems>
<ToolbarItem Name="MenuItem2" Order="Secondary" Text="Moje dane" Priority="1"/>
<ToolbarItem Name="MenuItem4" Order="Secondary" Text="Wyloguj" Priority="1"/>
<ToolbarItem Name="MenuItem4" Order="Secondary" Text="Do Strony Testowej" Priority="1"/>
<ToolbarItem Name="MenuItem4" Order="Secondary" Text="Checkout" Priority="1"/>
</ContentPage.ToolbarItems>
</ContentPage>
</ResourceDictionary>
</Application.Resources>
在我的“Page.xaml”之一中,我做了以下操作:
<ContentPage.ToolbarItems>
<ToolbarItem BindingContext="{StaticResource BoloTool}"/>
</ContentPage.ToolbarItems>
它可以编译,但工具栏没有显示任何内容,您可以听到点击声,但没有任何声音,也没有“3点”
我还尝试通过创建代码文件“x.cs”的方式来做到这一点:
public class BoloToolbar : ContentPage
{
public BoloToolbar()
: base()
{
Init();
}
private void Init()
{
this.ToolbarItems.Add(new ToolbarItem() { Text = "Help", Priority = 0, Order = ToolbarItemOrder.Secondary });
this.ToolbarItems.Add(new ToolbarItem() { Text = "License", Priority = 0, Order = ToolbarItemOrder.Secondary });
this.ToolbarItems.Add(new ToolbarItem() { Text = "About", Priority = 0, Order = ToolbarItemOrder.Secondary });
}
}
并在我的视图模型中继承:
public 类CartViewModel:BoloToolbar,INotifyPropertyChanged
但它不起作用。。我被困住了,我该怎么办?
附言奇怪的是,某些教程中没有通用工具栏这样的通用工具。
最佳答案
我认为您有点缺乏Xamarin.Forms的核心概念。您确实应该花一些时间研究它们。
并在我的视图模型中继承:
从BoloToolbar
类继承VM将无济于事。视图模型绑定到您的视图/页面,但与之不同。您应该从BoloToolbar
导出您的实际页面
<myNameSpace:BoloToolbar x:Class="MyNamespace.MyPage" ...>
<myNameSpace:BoloToolbar.Content>
<!-- Your content goes here -->
</myNameSpace:BoloToolbar.Content>
</myNameSpce:BoloToolbar>
不要忘记,你必须改变
public class MyPage : ContentPage
{
// ...
}
至
public class MyPage : BoloToolbar
{
// ..
}
在您的MyPage.xaml.cs中。
为什么第一种选择不起作用?
在Application.xaml中,您在资源字典中定义一个
ContentPage
,然后尝试将其分配给另一页的ToolbarItem
。<ContentPage.ToolbarItems>
<ToolbarItem ... />
</ContentPage.ToolbarItems>
向您的页面添加一个
ToolbarItem
。设置其BindingContext
不会对此进行任何更改。此外,既未设置Text
,也未设置Icon
,因此未显示任何内容。ToolbarItems
被声明为IList<ToolbarItem>
且为只读,因此您将无法通过资源简单地设置ToolbarItems
。在内部,它是一个ObservableCollection<ToolbarItem>
,并且操作Page.ToolbarItems
的唯一方法是添加ToolbarItem
对象。因此,您将只能添加基类中的项目。