【问题标题】:Exception has been thrown by the target of an invocation xamarin调用 xamarin 的目标已引发异常
【发布时间】:2018-11-08 21:41:35
【问题描述】:

我正在尝试构建主详细信息页面,但我不断收到错误消息“调用的目标已引发异常”并且无法对其进行测试。它在我按下登录按钮进入主页后显示(我会附上截图),但显然屏幕只是停留在主页上。

代码:XAML:

<?xml version="1.0" encoding="UTF-8"?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" 
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
                  x:Class="RoseySports.Home">





            <MasterDetailPage.Master>

        <ContentPage> 
            <AbsoluteLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">

        <Image AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
            Source="background.jpg" Aspect="AspectFill"/>

        <ScrollView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1">



        <StackLayout>
        <Button Text="Create Activity" TextColor="White" Clicked="Handle_Clicked"/>
            <Button Text="Check Availability" TextColor="White"/>
            <Button Text="Check Invitations" TextColor="White"/>
            <Button x:Name="SMA" Text="Propose Saturday  Morning Activity" TextColor="White"/>
            <Button x:Name="Logout" Text="Logout" Clicked="Handle_Clicked_1" TextColor="White" Margin="20"/>
        </StackLayout>
        </ScrollView>
        </AbsoluteLayout>
            </ContentPage>
                </MasterDetailPage.Master>


            <MasterDetailPage.Detail>

            <ContentPage>

        <AbsoluteLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">

        <Image AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1"
            Source="background.jpg" Aspect="AspectFill"/>

        <ScrollView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1">

                    <ContentView Padding="10,40,10,10">
        <Button Text="Menu" HorizontalOptions="Start" VerticalOptions="Start" TextColor="White" Clicked="Handle_Clicked_2"/>
                        </ContentView>

        </ScrollView>
        </AbsoluteLayout>


        </ContentPage>

            </MasterDetailPage.Detail>
</MasterDetailPage>

代码:C#:

using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace RoseySports
{
    public partial class Home : MasterDetailPage
    {
        public Home()
        {
            InitializeComponent();

        }

        private void Handle_Clicked(object sender, System.EventArgs e)
        {
            Detail = new Create_Activity();
            IsPresented = false;
        }

        private async void Handle_Clicked_1(object sender, System.EventArgs e)
        {
            await Navigation.PushModalAsync(new Login_Page());
        }

        void Handle_Clicked_2(object sender, System.EventArgs e)
        {
            IsPresented = true;
        }
    }
}

Error MessagePage before error shows up

【问题讨论】:

  • 相关信息应该在TargetInvocationException的内部异常中。

标签: c# xaml xamarin xamarin.forms master-detail


【解决方案1】:

您缺少ContentPage Title

首先,您应该打开 Xaml 编译器以帮助捕获 XAML 问题(在编译时和/或更好的错误消息,而无需查看 TargetInvocationException 的内部异常)。

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]

回复:XAML Compilation

虽然编译器在构建时实际上不会捕获这个缺少的标题属性,但您会在运行时收到错误消息:

`Title property must be set on Master page`

所以,在你的 ContentPage 上设置标题:

<ContentPage Title="Some Page Title">

例子:

<MasterDetailPage.Master>
    <ContentPage Title="Some Page Title">
        <AbsoluteLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
            <Image AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" Source="background.jpg" Aspect="AspectFill"/>
            <ScrollView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1">
                <StackLayout>
                    <Button Text="Create Activity" TextColor="White" Clicked="Handle_Clicked"/>
                    <Button Text="Check Availability" TextColor="White"/>
                    <Button Text="Check Invitations" TextColor="White"/>
                    <Button x:Name="SMA" Text="Propose Saturday  Morning Activity" TextColor="White"/>
                    <Button x:Name="Logout" Text="Logout" Clicked="Handle_Clicked_1" TextColor="White" Margin="20"/>
                </StackLayout>
            </ScrollView>
        </AbsoluteLayout>
    </ContentPage>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
    <ContentPage>
        <AbsoluteLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
            <Image AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" Source="background.jpg" Aspect="AspectFill"/>
                <ScrollView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0, 0, 1, 1">
                    <ContentView Padding="10,40,10,10">
                        <Button Text="Menu" HorizontalOptions="Start" VerticalOptions="Start" TextColor="White" Clicked="Handle_Clicked_2"/>
                    </ContentView>
                </ScrollView>
        </AbsoluteLayout>
    </ContentPage>
</MasterDetailPage.Detail>

【讨论】:

  • 你知道这是为什么吗?我在这个问题上浪费了几个小时,变得如此绝望,我只是在尝试我读到的任何东西。为什么定义标题如此重要?无论如何,非常感谢你!
  • @AsPas 我从来没有经历过all相关的代码,但是异常很早就被抛出了(在创建任何本机控件之前)并且会假设 它与 Android 的 ActionBar 相关,尝试将其标题设置为 null 将是一个“迟到的”异常,而不是使用 if/else 语句来测试null,它更简单只需为所有平台测试一次,然后假设它在以后的代码中永远不会是null(即早期失败与晚期失败的编码风格)
猜你喜欢
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2019-01-22
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多