在运行任务时,我有一个问题是显示叠加层的内容。我做了一个非常简单的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
的内容必须在开头才能看到......我该如何解决这个问题?
答案 0 :(得分:1)
我创建了一个解决方案并完全按照您的说明添加了页面。它没有问题,工作得很好。应用程序以隐藏覆盖开始,当单击以显示Overylay的内容时,可以显示/隐藏,并且能够按预期显示/隐藏。
我的建议是确保您拥有最新版本的Xamarin.Forms,因为之前有一个已解决的问题,请参阅链接 Visibility issue with dynamic content of a ContentView
我使用的版本是v2.3.1.114
让我知道您的更新。
答案 1 :(得分:0)
有时Xamarin.Forms缺少内容的重新呈现。在这种情况下,您可以通过在父视图上调用 ForceLayout()函数来显式触发视图的重新渲染过程。 对于您的情况,您必须致电:
overlay.ForceLayout();
更改其可见性后。