【问题标题】:Xamarin Dim Page (Master Detail Page)Xamarin 昏暗页面(主从页面)
【发布时间】:2016-11-30 15:10:09
【问题描述】:

因此,对于 Android,当显示主从页面的母版页时,母版页被“黑色暗淡”视图覆盖,因此很容易用肉眼区分这两个页面。在 iOS 中,详细信息页面不会变暗,因此很难区分视图。有没有办法用“黑色半透明”的 BoxView 或 Frame 覆盖详细信息页面,以便以与 Android 类似的方式使页面变暗。我尝试了许多不同颜色和不透明度的框视图,但它们都完全覆盖了屏幕,你无法“看穿它们”。有任何想法吗?还是更好的解决方案?即使它是可以工作的 BoxView 的客户渲染器。我只需要颜色创意/设置来让它看穿。

【问题讨论】:

  • 你为什么不改变母版页的背景颜色?
  • 这不是我想要的效果或我的应用程序的颜色主题。

标签: xaml xamarin xamarin.ios xamarin.forms master-detail


【解决方案1】:

我刚刚把FadeTo()方法的顺序改成了最后一个命令,暗黑效果就没了!

await currentPage.Content.FadeTo(0.5);

【讨论】:

    【解决方案2】:

    这里的示例: https://github.com/jgold6/XamarinSupportSamples/tree/master/XForms-TestShadingiOSDetailPage

    以下是链接断开时的代码:

    MasterDetailPage mdPage;
    Color origContentBgColor;
    Color origPageBgColor;
    
    public App()
        {
            mdPage = new MasterDetailPage();
            mdPage.IsPresentedChanged += async (object sender, EventArgs e) => {
                if (Device.OS == TargetPlatform.iOS) {
                    if (mdPage.IsPresented) {
                        var currentPage = (DetailPage)((NavigationPage)mdPage.Detail).CurrentPage;
                        origPageBgColor = currentPage.BackgroundColor;
                        origContentBgColor = currentPage.Content.BackgroundColor;
    
                        currentPage.BackgroundColor = Color.Black;
                        currentPage.Content.FadeTo(0.5);
                        if (currentPage.Content.BackgroundColor == Color.Default) {
                            currentPage.Content.BackgroundColor = Color.White;
    
                        }
                    }
                    else {
                        var currentPage = (DetailPage)((NavigationPage)mdPage.Detail).CurrentPage;
                        currentPage.BackgroundColor = origPageBgColor;
                        currentPage.Content.BackgroundColor = origContentBgColor;
                        currentPage.Content.FadeTo(1.0);
                    }
    
    
                }
            };
            mdPage.Master = new MasterPage(){Title = "Master Page"};
            mdPage.Detail = new NavigationPage( new DetailPage());
    
            // The root page of your application
            MainPage = mdPage;
        }
    

    【讨论】:

    • 谢谢,这很好,它确实有效,但唯一的问题是我看到它变成深黑色,然后它褪色为我想要的颜色,发生这种情况时看起来有点像闪烁。你知道有什么方法可以让我可以快速显示/隐藏不需要颜色和淡入淡出过渡的某种类型的叠加视图吗?
    • 嗯,我没有注意到在我的末端闪烁。但是你仍然可以使用mdPage.IsPresentedChanged 事件处理程序来做任何你想做的事情......即在详细信息页面上添加一个覆盖,但由于某种原因,IIRC 添加一个覆盖是有问题的,因此这个解决方案。
    • 谢谢!我最终使用这段代码来淡化不透明度,这对我来说没问题。
    • 嘿!您认为这如何与 TabbedPages 而不是 ContentPages 一起使用?
    • @Daniel,我想你已经有一段时间没有问过了,但我刚刚使用var currentPage = ((ContentPage)((TabbedPage)App.NavigationPage.CurrentPage)).CurrentPage; 处理了标签页
    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多