私はこれを間違った方法で実行していると確信しています。この問題は「設計上」です。UWP:バインディング+ TextChanging = JIT win32例外
Sliderとその値を表示するTextBoxが必要です。ユーザーはスライダを使用するか、TextBoxに手動で数値を入力することができます。
また、TextChangingイベントを利用して、非数値の項目を無視したいと考えました。 TextChangedはユーザーが何かを入力した後にしか機能しません。それは望ましいシナリオではなく、KeyDownはインキやスピーチのような他の入力方法を取り込めません。
だから私は、この持っている:
private void SizeText_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
// Nothing Here.
}
このコードのビルドが、起動時にアプリがJITの未処理がスローされます:「SizeText_TextChangingは」今、単にコードの空のブロックである
<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>
をwin32例外をクローズします。
TextChangingをTextChangedに変更しても問題ありませんが、やはりTextChangingをより好きなユーザーエクスペリエンスを得るために使用することができます。
"モード"も効果がありません。私は3つの異なるモードを試しましたが、すべてクラッシュしました。バインディングを完全に削除し、Textプロパティに任意の値を設定すると、正常に動作します。
は私も多分TextChangingイベントハンドラが空持つことは問題であると考えたので、私はhereから以下のコードを借りたが、アプリはまだクラッシュ:
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;
}
}
私が言ったように、私はおそらく、この近づいています間違った道。私はちょうどUWPとC#を学び始めているので、私は全然ノブです。しかし、私はTextChangingについて何でもできることをすべて読んだだけで、TextChangingイベントで書き込まないことの価値と関連する注意を表現しています。だから、スライダーの値を読んで、TextChangingイベントの内容を調べようとするループにアプリがスローされているように聞こえる間、私はそれを修正する方法は見当たりません。助けてください!
は、なぜこれが起こっている私は知らないが、回避策は一度だけSizeText
(またはページ)TextChanging
イベントハンドラを登録することでロードされており、Xを使用して、あなたに
残念ながら、これは機能しませんでした。それは私に同じ問題をもたらしました。 SizeText_Loadedのイベントハンドラ登録をコメントアウトすると、まだ問題が中継されているようです。 – Mushriq
パーフェクト!これはx:Bindで動作しました。私はまだこの現象が起こっているのか混乱しています(x:BindとTextChangingも動作しませんでしたが、Loadedイベントを使用することの提案が最初に行いました)。私は学ぶことがたくさんあることを知っています。再度、感謝します! – Mushriq