私はこの素晴らしいプラットフォームを初めて使用します。XAMLページを1つだけ含む非常に簡単な例を作成しました。昨日は問題なく機能していましたが、今日実行すると、この例外がどこからともなく投げ出されました
これは例外です:
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;
}
}
これは非常に微妙でキャッチするのが難しいです(実際、キャッチするのは難しくありません。InitializeComponent
の周りにtry/catch
を置くだけで、例外を調べることができます)。
XAMLは宣言型であるため、コントロールの属性の順序は重要ではないと考えられます。残念ながら、ある時点で宣言的なXAML willは一連のプロパティ割り当てに変換されるため、属性の順序doesは重要であり、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
を設定するだけで機能します。
@Paulが述べたように。 try-catchでラップすると、例外に関する詳細が表示されます。私はそれを理解する前に数時間を費やしました