【问题标题】:Show contentview on frame tapgesture在框架 Tapgesture 上显示内容视图
【发布时间】:2018-10-07 17:19:05
【问题描述】:

我正在使用 xaml 表单开发跨平台应用程序,但尚未弄清楚如何调用 ContentView ontapGesture。我可以使用 <local:MailRoomList/> 在 xaml 表单上调用 ContentView,但我无法在 ontap 或点击事件中显示视图。

我曾尝试使用 StackLayoutID.Children.Add(new MailRoomList()); 在 stacklayout 上显示视图,但这不是我想要的。我想在启用后退按钮的内容页面上显示完整的内容视图。

请指教。谢谢

邮箱列表

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="xx.xxxx.xx.Views.MailRoomList">
<ContentView.Content>
  <StackLayout>
      <Label Text="This is my MailRoom List" />
  </StackLayout>
</ContentView.Content>
</ContentView>

OnTapGesture

<Frame.GestureRecognizers>
    <TapGestureRecognizer Tapped="OnRegisterMail" NumberOfTapsRequired="1"/>
</Frame.GestureRecognizers>

代码隐藏

async void OnRegisterMail(object sender, EventArgs e)
{
    await Navigation.PushAsync(new MailRoomList());
}

编辑: 主页

<?xml version="1.0" encoding="utf-8" ?>
<xf1:BottomBarPage
         xmlns:xf1="clr-namespace:xx.xxxx.xx.BottomBar" 
         xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:xx.xxxx.xx.Views"
        x:Class="xx.xxxx.xx.Views.Home">
<ContentPage x:Name="MailRoomPage" Title="MailRoom" Icon="mailroom.png" xf1:BottomBarPageExtensions.TabColor="Orange" xf1:BottomBarPageExtensions.BadgeCount="5">
    <local:MailRoom/>
</ContentPage>

<ContentPage Title="Transport" Icon="transport.png" xf1:BottomBarPageExtensions.TabColor="Green" xf1:BottomBarPageExtensions.BadgeCount="10">
    <Label VerticalOptions="Center" HorizontalTextAlignment="Center" Text="Transport" FontSize="Large"/>
</ContentPage>
<ContentPage Title="Communication" Icon="communication.png" xf1:BottomBarPageExtensions.TabColor="Blue" xf1:BottomBarPageExtensions.BadgeCount="3">
    <Label VerticalOptions="Center" HorizontalTextAlignment="Center" Text="Communication" FontSize="Large"/>
</ContentPage>
<ContentPage Title="HSE" Icon="hse.png" xf1:BottomBarPageExtensions.TabColor="Red" xf1:BottomBarPageExtensions.BadgeCount="2">
    <Label VerticalOptions="Center" HorizontalTextAlignment="Center" Text="HSE" FontSize="Large"/>
</ContentPage>
<ContentPage Title="Meeting" Icon="meeting.png" xf1:BottomBarPageExtensions.TabColor="DarkCyan" xf1:BottomBarPageExtensions.BadgeCount="5">
    <Label VerticalOptions="Center" HorizontalTextAlignment="Center" Text="Meeting" FontSize="Large"/>
</ContentPage>

从上面的主页我调用我的视图&lt;local:MailRoom/&gt;,它正在调用另一个视图MailRoomList。这就是我需要您就如何从另一个内容视图调用内容视图提出建议的地方。

【问题讨论】:

  • 您应用的 MainPage 是 NavigationPage 吗?
  • 是的,首页是登录屏幕后的导航页。 Application.Current.MainPage = new NavigationPage(new Home());
  • 您是否检查了 OnRegisterMail 函数是否在 Tapping 后实际被调用?也试试 Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { await Navigation.PushAsync(new MailRoomList()); });
  • 如果这不起作用,请在您的主页后面发布 xaml 和代码隐藏。
  • 这不起作用,抛出错误无法从视图转换为 xamarin.forms.page。我从另一个角度打电话。

标签: xamarin xamarin.forms


【解决方案1】:

ContentViewView 而不是 Page。将您的 MainRoomList 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="xx.xxxx.xx.Views.MailRoomList">
     <StackLayout>
        <Label Text="This is my MailRoom List" />
     </StackLayout>
 </ContentPage>

View 不支持导航,它们只能导航到如果它们属于Page,这是包含导航基础设施的对象。

如果您想将您的MailRoomList 保持为ContentView,那么您需要将她包含在一些其他页面中,并执行导航(在点击方法中)到那个其他页面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2012-01-21
    • 2018-10-10
    • 2016-11-21
    • 2011-12-12
    • 2023-03-10
    • 2012-12-17
    相关资源
    最近更新 更多