System.ArgumentException:<timeout exceeded =“”getting =“”exception =“”details =“”> Xamarin.Forms

时间:2017-11-21 16:26:37

标签: xamarin.forms

我是这个非常棒的平台的新手,我做了一个非常简单的例子,它只包含一个XAML页面。昨天它运作得很完美,但是今天运行它时,它突然抛出了这个异常

这个例外:

Exception

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;
  }
}

2 个答案:

答案 0 :(得分:21)

这个非常微妙且难以捕捉(好吧,实际上它并不难捕捉;只需在try/catch附近放InitializeComponent就可以检查异常。

XAML是声明性的,它使我们相信控件的属性顺序无关紧要。不幸的是,由于在某些时候声明性XAML 转换为一系列属性赋值,属性的顺序很重要,它是您Slider的顺序导致异常被抛出的属性。

您可以想象您的Slider构建方式如下:

var slider = new Slider();
slider.Minimum = 16;
slider.Maximum = 45;
...

但是Slider.MinimumSlider.Maximum似乎检查传递的值是否有效。

代码开始时,Maximum的值默认为0。但在分配其值之前,Minimum的值的值为16

此时,您的Minimum值(16)大于默认Maximum值(0),因此会抛出ArgumentOutOfRangeException

要解决此问题,只需在Maximum值之前设置Minimum即可。

答案 1 :(得分:2)

正如@Paul所说。用try-catch包裹它,它提供了有关异常的更多详细信息。我花了几个小时才弄清楚做到这一点