如果ContentView的内容在开头不可见,则不会显示内容?

时间:2016-09-08 09:06:47

标签: xamarin.forms

在运行任务时,我有一个问题是显示叠加层的内容。我做了一个非常简单的Xamarin.Forms共享项目来重现问题(此时我只在Android模拟器中运行它)。我在页面中有两个主要元素:"#1234"带有StackLayout(用于显示叠加层),Button带有另一个ContentView(用于隐藏叠加层):< / p>

OverlayPage.xaml:

Button

OverlayPage.xaml.cs:

<?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>

App.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;
        }
    }
}

当我运行该应用时,当我点击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按钮)不可见。如果我将xaml设置hideOverlayButton&#39; overlay属性更改为IsVisible

True

然后我运行应用程序,然后我可以看到带有<ContentView x:Name="overlay" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" IsVisible="True" BackgroundColor="#C0808080" Padding="10, 0"> 大按钮的灰色图层。在这种情况下,我可以隐藏叠加层,并再次显示,隐藏,显示,隐藏......

似乎hideOverlayButton的内容必须在开头才能看到......我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我创建了一个解决方案并完全按照您的说明添加了页面。它没有问题,工作得很好。应用程序以隐藏覆盖开始,当单击以显示Overylay的内容时,可以显示/隐藏,并且能够按预期显示/隐藏。

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

我使用的版本是v2.3.1.114

让我知道您的更新。

答案 1 :(得分:0)

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

overlay.ForceLayout();

更改其可见性后。