我想使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对象。因此,您将只能添加基类中的项目。

09-27 12:24