简体   繁体   English

扩展器是否不适用于 Xamarin Forms MacOS?

[英]Is Expander not available for Xamarin Forms MacOS?

I am trying to implement the newly added Expander that the Xamarin team released on MacOS.我正在尝试实现 Xamarin 团队在 MacOS 上发布的新添加的Expander

I am following this guide: Xamarin Forms: How to set a list of items as the Expander Child?我正在遵循本指南: Xamarin Forms:如何将项目列表设置为 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>

When navigating to a page with this code, I get an exception, stating that I need to call Xamarin.Forms.Forms.SetFlags("Expander_Experimental");使用此代码导航到页面时,出现异常,指出我需要调用Xamarin.Forms.Forms.SetFlags("Expander_Experimental"); , which I already have added in my public AppDelegate() method in the MacOS folder. ,我已经在 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;
    }

Is the expander not supported for MacOS, or am i missing a crucial step? MacOS 不支持扩展器,还是我错过了关键步骤?

I also tried adding it in the DidFinishLaunching method, but no difference.我也尝试在 DidFinishLaunching 方法中添加它,但没有区别。

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

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

I almost ran into it myself while testing this new component!我在测试这个新组件时差点就遇到了它! As mentioned on the Xamarin.Forms experimental flags page:Xamarin.Forms 实验标志页面所述:

Never call the SetFlags method more than once, as subsequent calls will overwrite the result of previous calls.切勿SetFlags调用SetFlags方法,因为后续调用将覆盖先前调用的结果。

So instead of:所以而不是:

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

call it once, but with both flags:调用一次,但有两个标志:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM