Xamarin Forms MacOS不能使用Expander吗?

如何解决Xamarin Forms MacOS不能使用Expander吗?

我正在尝试实施Xamarin团队在MacOS上发布的新添加Expander

我正在遵循本指南:Xamarin Forms: How to set a list of items as the Expander Child?

<StackLayout x:Name="expanderLayout" IsVisible="False" BindableLayout.ItemsSource="{Binding  AllItems,Mode=TwoWay}">
    <BindableLayout.ItemTemplate>
        <DataTemplate>
            <Expander
                    ExpandAnimationEasing="{x:Static Easing.CubicIn}"
                    ExpandAnimationLength="500"
                    CollapseAnimationEasing="{x:Static Easing.CubicOut}"
                    CollapseAnimationLength="500">
                <Expander.Header>
                    <Frame 
                            Padding="2"
                            Margin="5"
                            HasShadow="False"
                            BorderColor="#fdeec7"
                            CornerRadius="0">

                        <StackLayout
                                HorizontalOptions="FillAndExpand"
                                VerticalOptions="FillAndExpand"
                                Orientation="Horizontal">

                            <Label 
                                    Text="{Binding unit.title}"
                                    TextColor="Black"
                                    HorizontalOptions="Start" 
                                    HorizontalTextAlignment="Start"
                                    VerticalTextAlignment="Center"
                                    VerticalOptions="CenterandExpand">
                                <Label.FontSize>
                                    <OnIdiom x:TypeArguments="x:Double">
                                        <OnIdiom.Phone>18</OnIdiom.Phone>
                                        <OnIdiom.Tablet>36</OnIdiom.Tablet>
                                        <OnIdiom.Desktop>18</OnIdiom.Desktop>
                                    </OnIdiom>
                                </Label.FontSize>
                            </Label>

                            <StackLayout.Margin>
                                <OnIdiom x:TypeArguments="Thickness">
                                    <OnIdiom.Phone>5</OnIdiom.Phone>
                                    <OnIdiom.Tablet>8</OnIdiom.Tablet>
                                    <OnIdiom.Desktop>5</OnIdiom.Desktop>
                                </OnIdiom>
                            </StackLayout.Margin>
                            <StackLayout.Padding>
                                <OnIdiom x:TypeArguments="Thickness">
                                    <OnIdiom.Phone>5</OnIdiom.Phone>
                                    <OnIdiom.Tablet>8</OnIdiom.Tablet>
                                    <OnIdiom.Desktop>5</OnIdiom.Desktop>
                                </OnIdiom>
                            </StackLayout.Padding>
                        </StackLayout>
                    </Frame>
                </Expander.Header>
                <Expander.ContentTemplate>
                    <DataTemplate>
                        <StackLayout BindableLayout.ItemsSource="{Binding contentList,Mode=TwoWay}">
                            <BindableLayout.ItemTemplate>
                                <DataTemplate>
                                <StackLayout 
                            Orientation="Horizontal">

                                    <Label
                                    HorizontalOptions="Start"
                                    Text="{Binding title}"
                                    VerticalOptions="CenterandExpand"     
                                    TextColor="Black">
                                        <Label.FontSize>
                                            <OnIdiom x:TypeArguments="x:Double">
                                                <OnIdiom.Phone>16</OnIdiom.Phone>
                                                <OnIdiom.Tablet>32</OnIdiom.Tablet>
                                                <OnIdiom.Desktop>16</OnIdiom.Desktop>
                                            </OnIdiom>
                                        </Label.FontSize>
                                        <Label.GestureRecognizers>
                                                        <TapGestureRecognizer
                                                            Tapped="LoadChapter"
                                                            CommandParameter="{Binding .}"
                                                            NumberOfTapsrequired="1">
                                                        </TapGestureRecognizer>
                                                    </Label.GestureRecognizers>
                                    </Label>
                                </StackLayout>
                            </DataTemplate>
                            </BindableLayout.ItemTemplate>
                           
                        </StackLayout>
                    </DataTemplate>
                </Expander.ContentTemplate>
            </Expander>
        </DataTemplate>
    </BindableLayout.ItemTemplate>
</StackLayout>

在导航到带有此代码页面时,出现异常,表明我需要调用Xamarin.Forms.Forms.SetFlags("Expander_Experimental");,我已经在MacOS文件夹的public AppDelegate()方法添加了该变量。

    public AppDelegate()
    {
        Xamarin.Forms.Forms.SetFlags("Expander_Experimental");
        Xamarin.Forms.Forms.SetFlags("CarouselView_Experimental");

        var style = NSWindowStyle.Closable | NSWindowStyle.Miniaturizable | NSWindowStyle.Resizable | NSWindowStyle.Titled | NSWindowStyle.FullSizeContentView;
        var frame = NSScreen.MainScreen.Frame;
        var rect = NSWindow.FrameRectFor(frame,style);
        _window = new NSWindow(rect,style,NSbackingStore.Buffered,false);
        _window.MinSize = new CoreGraphics.CGSize(400,300);
        _window.TitlebarappearsTransparent = true;
        _window.MovableByWindowBackground = true;
        _window.AccessibilityMinimized = false;
    }

MacOS不支持扩展器,还是我错过了关键步骤?

我还尝试将其添加到DidFinishLaunching方法中,但没有区别。

    public override void DidFinishLaunching(NSNotification notification)
    {   
        Xamarin.Forms.Forms.SetFlags("Expander_Experimental");
        Xamarin.Forms.Forms.SetFlags("CarouselView_Experimental");

        Forms.Init();
        CachedImageRenderer.Init();
    ...

解决方法

我在测试这个新组件时几乎碰到了它!如Xamarin.Forms experimental flags页上所述:

请不要多次调用SetFlags方法,因为后续调用将覆盖先前调用的结果。

所以代替:

Xamarin.Forms.Forms.SetFlags("Expander_Experimental");
Xamarin.Forms.Forms.SetFlags("CarouselView_Experimental"); // This call overwrites the `Expander_Experimental` flag set just above

调用一次,但同时带有两个标志:

Xamarin.Forms.Forms.SetFlags(new string[] { "Expander_Experimental","CarouselView_Experimental" } );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?