2017-06-20 40 views
0

新手在这里。我记得在Win10中,有一个PopUp UI,它可以包含许多控件,比如下拉框,DatePciker等等。这个PopUp可以在Xaml中构建。
弹出包含其他控件,如DateTime Picker,下拉列表

我正在开发平板电脑应用程序。 可以在Xamarin表单中使用这样的PopUp,其中包含下拉列表,DatePicker,时间选择器?建议做这样复杂的用户界面?它会在Android和iOS中造成问题吗?

问题:如何在XAML

so ,I can use a button to open or close it. 

var button = new Button {Text = "Show Popup"}; 
button.Clicked += (s, e) => popup.Show(); 

更新

<?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="MyApp.View.PopUpDemo" 
      Title="PopUp Demo" 
      Icon="itemIcon3"> 

<Grid> 
    <Grid> 

     <!--Your Page xaml--> 

     <Button x:Name="btnPopUp" Click="ShowPopUp"/> 

    </Grid> 

    <Grid HorizontalOptions="Fill" BackgroundColor="##60000000" IsVisible="{Binding GridVisibility}"> 
     <Grid VerticalOptions="CenterAndExpand"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width=".5*"/> 
       <ColumnDefinition Width="9*"/> 
       <ColumnDefinition Width=".5*"/> 
      </Grid.ColumnDefinitions> 
      <Frame Grid.Column="1" Padding="0" HasShadow="True" OutlineColor="#e6e6e6"> 
       <Grid BackgroundColor="White" RowSpacing="0" ColumnSpacing="0"> 
       <!--content for popup--> 
       </Grid> 
      </Frame> 
     </Grid> 

    </Grid> 
</Grid> 

</ContentPage> 

创建弹出我想知道:

我使用的是正常ContentPage。

1)其中,我把你的MarkUp <网格>,我删除<ContentPage.Content>。它是否正确?

2)Frame是PopUp吗?
3)在btnPopUp中使用什么代码来显示PopUp?

谢谢

回答

1

是的,你可以实现它没有任何性能问题。您可以使用覆盖显示弹出如下所示

<Grid> 
    <Grid> 
     <!--Your Page xaml--> 
    </Grid> 
    <Grid HorizontalOptions="Fill" BackgroundColor="##60000000" IsVisible="{Binding GridVisibility}"> 
     <Grid VerticalOptions="CenterAndExpand"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width=".5*"/> 
       <ColumnDefinition Width="9*"/> 
       <ColumnDefinition Width=".5*"/> 
      </Grid.ColumnDefinitions> 
      <Frame Grid.Column="1" Padding="0" HasShadow="True" OutlineColor="#e6e6e6"> 
       <Grid BackgroundColor="White" RowSpacing="0" ColumnSpacing="0"> 
       <!--content for popup--> 
       </Grid> 
      </Frame> 
     </Grid> 

    </Grid> 
</Grid> 

这一个很简单。在这里我已经添加了网格来实现这一点。您也可以使用其他布局。但是对于性能来说,根据Xamarin团队,网格更好。

对于第二个网格,我添加了Visibility属性,以便您可以连接任何事件。 在这里,我添加了popupcolor ## 60000000的背景颜色,这样当出现弹出窗口时,背景将会透明并带有浅黑色效果。

如果您需要在多个屏幕上弹出相同的弹出窗口,您可以使用第三方插件https://github.com/rotorgames/Rg.Plugins.Popup,这将使您的工作更轻松。对于这一点,你必须做出一个新的contentpage,与

<pages:PopupPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:pages="clr-namespace:Rg.Plugins.Popup.Pages;assembly=Rg.Plugins.Popup" 
     xmlns:animations="clr-namespace:Rg.Plugins.Popup.Animations;assembly=Rg.Plugins.Popup" 
     x:Class="" 
     BackgroundColor="##60000000" 
     InputTransparent="True" 
     HasSystemPadding="True" 
     CloseWhenBackgroundIsClicked="False"> 
<pages:PopupPage.Animation> 
    <animations:MoveAnimation 
       PositionIn="Bottom" 
       PositionOut="Bottom"/> 
</pages:PopupPage.Animation> 
<Grid> 
    <!--your xaml code--> 
</Grid> 

注意更换contentpage:与PopupPage在youpage.xaml.cs更换contentPage。要获得弹出效果,你的布局应该像我所示的第一个例子。在这里你也可以得到很好的动画效果。更多细节你可以在他们的网站上看到。

现在,您可以通过拨打呼叫弹出:navigation.PushPopupAsync(new YourContentPage());

,并通过调用await PopupNavigation.RemovePageAsync(this);

希望删除弹出,这将是对您有用

+0

请参阅我的更新。希望你能引导我首先使用你的方法。我想在用户单击按钮时在同一页面上显示弹出窗口。 – MilkBottle

+0

这两种方法都会让您在同一页面弹出。在使用第二种方法时,您需要编写XAML以便仅弹出一次,并且您可以从任何页面调用它,它将显示为弹出式窗口。你可以尝试任何方法。如果你卡住了,请让我知道。 – Renjith

+0

我坚持如何在我的更新和我的问题上面调用弹出窗口。你能告诉我步骤吗?谢谢 – MilkBottle