【问题标题】:System.FormatException on Content.View-InitializationSystem.FormatException on Content.View-Initialization
【发布时间】:2019-09-24 02:59:17
【问题描述】:

我正在为我的学士学位开发一个应用程序,用于创建和管理考古现场指南。一项功能应使用户能够在应用程序内创建新的现场指南。字段指南应包含一般信息(标题、作者等)和工件类型的多个条目。 我想通过拥有一个具有两个视图的 ContentPage 来实现这一点——一个用于书籍信息,一个用于条目列表。用户应该能够在两个视图之间切换。 为了实现这一点,我将两者都创建为 ContentView,将它们包含在 Parent-XAML 中,并将它们的 IsVisible 属性绑定到 ViewModel 中的各个布尔值。奇怪的是,“NewBookInfo”在初始化时抛出异常,而“NewBookEntryList”工作得很好。我在谷歌上找不到解决方案,现在有点抓不住稻草......

<ColumnDefinition Width="100/3*" />InitializeComponent() 中导致运行时异常:

System.FormatException
Message=One of the identified items was in an invalid format.
Source=Xamarin.Forms.Core
StackTrace:
 at Xamarin.Forms.GridLengthTypeConverter.ConvertFromInvariantString(String value)
 ...

我的父页面:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"     
             xmlns:local="clr-namespace:FieldGuide.Views"
             x:Class="FieldGuide.AddBook">

    <StackLayout Spacing="1" VerticalOptions="Fill">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />

            </Grid.ColumnDefinitions>
            <Label Text="New Guide" FontAttributes="Bold" FontSize="30" 
                   HorizontalOptions="Center"
                   VerticalOptions="CenterAndExpand"
                   Grid.Row="0" Grid.Column="0" />
            <ImageButton Source="Return_klein.png" Grid.Row="0" Grid.Column="1" Command="{Binding ReturnCommand}"/>
            <ImageButton Source="Hamburger_Icon_klein.png" Grid.Row="0" Grid.Column="2" Command="{Binding MenuCommand}"/>
        </Grid>
        <!--BackgroundColor="Transparent" bei Buttons einfügen-->
        <local:NewBookInfo VerticalOptions="FillAndExpand" IsVisible="{Binding BookInfoVisible}"/>
        <local:NewBookEntryList VerticalOptions="FillAndExpand" IsVisible="{Binding BookEntriesVisible}"/>
    </StackLayout>

</ContentPage>

NewBookInfo.xaml

<?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="FieldGuide.Views.NewBookInfo">
  <ContentView.Content>
        <StackLayout>
            <Grid Margin="10, 10">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="30*"/>
                    <ColumnDefinition Width="70*"/>
                </Grid.ColumnDefinitions>
                <Label Text="Title" FontSize="20" 
                   HorizontalOptions="Center" VerticalOptions="CenterAndExpand" 
                   Grid.Row="0" Grid.Column="0"/>
                <Label Text="Author" FontSize="20" 
                   HorizontalOptions="Center" VerticalOptions="CenterAndExpand" 
                   Grid.Row="1" Grid.Column="0"/>
                <Label Text="Tags" FontSize="20" 
                   HorizontalOptions="Center" VerticalOptions="CenterAndExpand" 
                   Grid.Row="2" Grid.Column="0"/>
                <Entry Grid.Row="0" Grid.Column="1"/>
                <Entry Grid.Row="1" Grid.Column="1"/>
                <Entry Placeholder="Separate with Comma" Grid.Row="2" Grid.Column="1"/>
            </Grid>
            <Grid VerticalOptions="EndAndExpand" Margin="10, 10">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="100/3*"/>
                    <ColumnDefinition Width="100/3*"/>
                    <ColumnDefinition Width="100/3*"/>
                </Grid.ColumnDefinitions>
                <Button Text="Save" Grid.Row="0" Grid.Column="0" 
                        Command="{Binding SaveBook}"/>
                <Button Text="Entries" Grid.Row="0" Grid.Column="1" 
                        Command="{Binding NewEntry}"/>
                <Button Text="Discard" Grid.Row="0" Grid.Column="2" 
                        Command="{Binding DiscardBook}"/>
            </Grid>
        </StackLayout>
    </ContentView.Content>
</ContentView>

用于比较NewBookEntryList.xaml(ListView尚未完成)

<?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="FieldGuide.Views.NewBookEntryList">
    <ContentView.Content>
        <StackLayout>
            <ListView x:Name="FileSystem" ItemsSource="{Binding Entries}" SelectedItem="{Binding SelectedEntry}" VerticalOptions="FillAndExpand">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>

                                <Label Text="{Binding Name}" Margin="10" FontSize="Medium" VerticalOptions="Center" HorizontalOptions="StartAndExpand"/>
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <Grid VerticalOptions="EndAndExpand" Margin="10, 10">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="50*"/>
                    <ColumnDefinition Width="50*"/>
                </Grid.ColumnDefinitions>
                <Button Text="Book Info" Grid.Row="0" Grid.Column="0" 
                        Command="{Binding SaveBook}"/>
                <Button Text="New Entry" Grid.Row="0" Grid.Column="1" 
                        Command="{Binding NewEntry}"/>
            </Grid>
        </StackLayout>
    </ContentView.Content>
</ContentView>

这就是我希望它最终的样子。

【问题讨论】:

  • 我无法理解什么是问题。你想摆脱 Format Exception 吗?或者你想摆脱额外的空间?
  • 对不起,如果不清楚:我想摆脱格式异常,我刚刚意识到我为“我希望它如何成为一部分”拍了一张错误的照片。马上改正。
  • 您是否启用了 XAML 编译?这应该可以帮助您缩小错误原因
  • @Jason 我只使用 VS 提供的默认错误检测。我知道将错误缩小到 NewBookInfo.xaml 中最后一个网格的列定义,但至少 VS 没有显示任何错误并且预览器正确显示它们。猜猜我只需要找到另一种方法来给每个按钮 1/3 的宽度......有没有用于 XAML 编译的特殊工具?

标签: c# xaml xamarin.forms


【解决方案1】:

问题出在 NewBookInfo.xaml 中最后一个网格的宽度声明中。但是 VS 中的内置错误检测未标记该错误。 而不是

<ColumnDefinition Width="100/3*"/>

我只是换成了

<ColumnDefinition Width="33*"/>

感谢 @Jason 在 cmets 中提供帮助。

【讨论】:

    猜你喜欢
    • 2022-12-28
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2022-07-14
    • 2017-12-29
    • 2022-12-01
    • 2015-02-21
    • 2011-07-17
    相关资源
    最近更新 更多