【问题标题】:ContentView's content isn't shown if it isn't visible at the beginning?如果 ContentView 的内容在开始时不可见,则不显示?
【发布时间】:2020-02-18 16:56:26
【问题描述】:

我在任务运行时无法显示覆盖的内容。我做了一个非常简单的 Xamarin.Forms 共享项目来重现问题(此时我只在 Android 模拟器中运行它)。我在页面中有 2 个主要元素:StackLayoutButton(显示覆盖)和 ContentView 和另一个 Button(隐藏覆盖):

OverlayPage.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="OverlayTest.Pages.OverlayPage">
    <AbsoluteLayout>
    <StackLayout AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All">
      <Button x:Name="showOverlayButton" Text="Show overlay" Clicked="ShowOverlayButtonClicked"/>
    </StackLayout>
    <ContentView x:Name="overlay" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All"
                 IsVisible="False" BackgroundColor="#C0808080" Padding="10, 0">
      <Button x:Name="hideOverlayButton" Text="Hide overlay" Clicked="HideOverlayButtonClicked"/>
    </ContentView>
  </AbsoluteLayout>
</ContentPage>

OverlayPage.xaml.cs:

using System;
using Xamarin.Forms;

namespace OverlayTest.Pages
{
    public partial class OverlayPage : ContentPage
    {
        public OverlayPage()
        {
            InitializeComponent();
        }

        private void ShowOverlayButtonClicked(object sender, EventArgs e)
        {
            this.overlay.IsVisible = true;
        }

        private void HideOverlayButtonClicked(object sender, EventArgs e)
        {
            this.overlay.IsVisible = false;
        }
    }
}

App.cs:

using OverlayTest.Pages;
using Xamarin.Forms;

namespace OverlayTest
{
    public class App : Application
    {
        public App()
        {
            // The root page of your application
            this.MainPage = new NavigationPage(new OverlayPage());
        }
    }
}

当我运行应用程序时,当我点击showOverlayButton 时,会显示灰色层,但它的内容(hideOverlayButton 按钮)不可见。如果我将 xaml 设置 overlayIsVisible 属性更改为 True:

<ContentView x:Name="overlay" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All"
             IsVisible="True" BackgroundColor="#C0808080" Padding="10, 0">

然后我运行应用程序,然后我可以看到带有 hideOverlayButton 大按钮的灰色层。在这种情况下,我可以隐藏叠加层,然后再次显示,然后隐藏、显示、隐藏...

看来ContentView的内容必须在一开始就可见...我该如何解决这个问题?

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    我创建了一个解决方案并完全按照您的说明添加了页面。它运行良好,没有任何问题。该应用程序以隐藏的叠加层开始,当单击以显示叠加层的内容时可见并且能够按预期显示/隐藏。

    我对您的建议是确保您拥有最新版本的 Xamarin.Forms,因为之前有一个已解决的问题,请参阅链接 Visibility issue with dynamic content of a ContentView

    我使用的版本v2.3.1.114

    让我知道你的更新。

    【讨论】:

    • 谢谢你的回答,你是对的。我正在使用默认的 Xamarin.Forms 库(较旧的库)。现在叠加层的内容是可见的!谢谢!
    • 很高兴能帮上忙。
    【解决方案2】:

    有时 Xamarin.Forms 会错过重新呈现内容。在这种情况下,您可以通过在父视图上调用 ForceLayout() 函数显式触发视图的重新渲染过程。 在您的情况下,您必须致电:

    overlay.ForceLayout();
    

    更改其可见性后。

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2019-09-03
      • 2013-03-14
      相关资源
      最近更新 更多