我是这个非常棒的平台的新手,我做了一个非常简单的例子,它只包含一个XAML页面。昨天它运作得很完美,但是今天运行它时,它突然抛出了这个异常
这个例外:
HelloPage.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="SAP.HelloPage">
<!-- la configuration personalisé pour chaque system d'éxploitation -->
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness"
iOS="0,10,0,0"
Android="0,40,0,0">
</OnPlatform>
</ContentPage.Padding>
<StackLayout HorizontalOptions="Center" BindingContext="{x:Reference sliderID}">
<Button Clicked="Button_Clicked" Text="Suivant"/>
<Label x:Name="lb_font" Text="Font is :"/>
<Slider Minimum="16" Maximum="45" x:Name="sliderID" ValueChanged="sliderID_ValueChanged"/>
<Label x:Name="lb_quote"/>
</StackLayout>
<ContentPage>
HelloPage.xaml.cs:
public partial class HelloPage : ContentPage
{
// quotes
List<string> quotes = new List<string>()
{
"Bienvenu, la première paragraphe",
"une autre quote, cella j'adore",
"La troisième est magnifique"
};
int pos = 0;
public HelloPage()
{
InitializeComponent();
// settings initialisation
lb_quote.Text = quotes.ElementAt(0);
}
private void Button_Clicked(object sender, EventArgs e)
{
if(pos == quotes.Count)
{
pos = 0;
}
lb_quote.Text = quotes.ElementAt(pos);
pos += 1;
}
private void sliderID_ValueChanged(object sender, ValueChangedEventArgs e)
{
lb_font.Text ="Font Size : " + sliderID.Value.ToString();
lb_quote.FontSize = sliderID.Value;
}
}
答案 0 :(得分:21)
这个非常微妙且难以捕捉(好吧,实际上它并不难捕捉;只需在try/catch
附近放InitializeComponent
就可以检查异常。
XAML是声明性的,它使我们相信控件的属性顺序无关紧要。不幸的是,由于在某些时候声明性XAML 将转换为一系列属性赋值,属性的顺序很重要,它是您Slider
的顺序导致异常被抛出的属性。
您可以想象您的Slider
构建方式如下:
var slider = new Slider();
slider.Minimum = 16;
slider.Maximum = 45;
...
但是Slider.Minimum
和Slider.Maximum
似乎检查传递的值是否有效。
代码开始时,Maximum
的值默认为0
。但在分配其值之前,Minimum
的值的值为16
。
此时,您的Minimum
值(16)大于默认Maximum
值(0),因此会抛出ArgumentOutOfRangeException
。
要解决此问题,只需在Maximum
值之前设置Minimum
即可。
答案 1 :(得分:2)
正如@Paul所说。用try-catch包裹它,它提供了有关异常的更多详细信息。我花了几个小时才弄清楚做到这一点