Ich bin 100% sicher, dass ich das falsch mache und dieses Problem ist "von Design".UWP: Binding + TextChanging = JIT win32 Ausnahme
Ich möchte einen Schieberegler und eine TextBox, die ihren Wert anzeigt. Der Benutzer kann entweder den Slider verwenden oder manuell eine Zahl in die TextBox eingeben.
Ich wollte auch das TextChanging-Ereignis nutzen, um nicht numerische Einträge zu ignorieren. TextChanged würde nur funktionieren, nachdem ein Benutzer etwas eingegeben hat, und dies ist kein bevorzugtes Szenario, und KeyDown würde andere Eingabemethoden wie Tinte oder Sprache nicht erfassen.
So habe ich dies:
<StackPanel>
<Slider x:Name="Size" Value="100" Maximum="100" Minimum="0" />
<TextBox x:Name="SizeText" Text="{Binding ElementName=Size,Path=Value,Mode=TwoWay}" TextChanging="SizeText_TextChanging" />
</StackPanel>
Wo "SizeText_TextChanging" ist einfach ein leerer Block von Code jetzt:
private void SizeText_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
// Nothing Here.
}
Dieser Code erstellt, aber beim Start der App wirft einen JIT unhandled win32 Ausnahme und schließt.
Ändern von TextChanging zu TextChanged funktioniert gut, aber wieder bevorzuge ich TextChanging zu arbeiten (oder etwas Ähnliches), um eine bessere Benutzererfahrung zu geben.
"Modus" hat auch keine Wirkung. Ich habe alle drei verschiedenen Modi ausprobiert, alle stürzen ab. Wenn Sie die Bindung vollständig entfernen und der Text-Eigenschaft einen beliebigen Wert zuweisen, funktioniert dies einwandfrei.
Ich dachte auch, dass vielleicht die Event-Handler leer ist das Problem TextChanging mit, so dass ich lieh unter dem Code aus here aber die App stürzt nach wie vor:
private void SizeText_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
if (!Regex.IsMatch(sender.Text, "^\\d*\\.?\\d*$") && sender.Text != "")
{
int pos = sender.SelectionStart - 1;
sender.Text = sender.Text.Remove(pos, 1);
sender.SelectionStart = pos;
}
}
Wie ich schon sagte, ich wahrscheinlich der am Annäherung an den Falsche Weg. Ich fange gerade an, UWP und C# zu lernen, also bin ich ein totaler Noob. Aber ich habe alles gelesen, was ich über TextChanging wissen konnte, und es geht einfach darum, den Wert und die damit verbundenen Vorsichtsmaßregeln zu rendern, was nicht innerhalb des TextChanging-Ereignisses zu schreiben ist. Während es sich anhört, als würde die App in eine Schleife geworfen werden, die versucht, den Wert des Schiebereglers zu lesen und zu sehen, was das TextChanging-Ereignis sagt, sehe ich nicht, wie ich es beheben kann. Bitte helfen Sie!
Danke
Leider hat das nicht funktioniert. Es gab mir das gleiche Problem. Das Auskommentieren der Event-Handler-Registrierung in SizeText_Loaded funktioniert so, als ob es das Problem noch weitergibt. – Mushriq
Perfekt! Dies funktionierte mit x: Bind. Ich bin immer noch verwirrt, warum dieses Verhalten passiert (x: Bind und TextChanging funktionierte auch nicht, aber Ihr Vorschlag, das Loaded-Ereignis zuerst zu verwenden). Ich weiß, dass ich viel zu lernen habe. Danke noch einmal! – Mushriq