【发布时间】:2017-12-12 23:35:57
【问题描述】:
我发现 Xamarin.Forms XAML 非常令人沮丧。
如果我使用这种语法...
<ContentView.Resources>
<local:MyConverter1 x:Key="MyConverter1"/>
</ContentView.Resources>
我将从 InitializeComponent() 获得 System.NullReferenceException。堆栈跟踪或输出窗口或其他任何地方都没有告诉我出了什么问题。
注意:此语法在 WPF 中运行良好。
经过一番努力,我发现我需要这种语法......
<ContentView.Resources>
<ResourceDictionary>
<local:MyConverter1 x:Key="MyConverter1"/>
</ResourceDictionary>
</ContentView.Resources>
对于 ListView DataTemplate 也是如此。这会引发空引用异常...
<ListView.ItemTemplate>
<DataTemplate>
<Label Text="{Binding Converter={StaticResource MyConverter1}}"/>
</DataTemplate>
</ListView.ItemTemplate>
因为正确的语法是这样的......
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Converter={StaticResource MyConverter1}}"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
同样,这种语法在 WPF 中也能正常工作。我完全意识到 Xamarin.Forms 不是 WPF,但是每当我使用在 WPF 中有效的 XAML 构造时,我都会厌倦被空引用异常所打击。
调试 Xamarin.Forms XAML 问题的最佳方法是什么?
现在我只是在评论一些东西,直到它开始工作。这类似于将打印语句放入命令式代码中。声明式代码应该优于命令式代码。
我做错了什么?
【问题讨论】:
-
当有一本关于这个主题的免费和伟大的书时,developer.xamarin.com/guides/xamarin-forms/…我想知道你为什么坚持通过犯一些简单的错误来学习这项技术。没有简单的调试方法,但如果您确实按照提示进行操作,大多数问题一开始都不会发生。
-
启用 XAML 编译将在构建时捕获其中一些问题:developer.xamarin.com/guides/xamarin-forms/xaml/xamlc
-
你能详细描述一下
This throws null reference exception...的意思吗 -
你可以在你的转换器中设置一个断点,但我需要知道你所说的话是什么意思(见上面的评论)
-
还要确保你有这个:
xmlns:local="clr-namespace:{ProperNameSpace};assembly={ProperAssembly}"。但是,在我明白你所说的空引用是什么意思之前,我不能说太多了
标签: c# xaml xamarin xamarin.forms