2016-10-14 13 views
1

私はこれを間違った方法で実行していると確信しています。この問題は「設計上」です。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を使用して、あなたに

答えて

2

ありがとう:代わりに、バインディングのバインド:

XAML

<TextBox x:Name="SizeText" Text="{x:Bind Size.Value, Mode=TwoWay}" Loaded="SizeText_Loaded"/> 

CS

private void SizeText_Loaded(object sender, RoutedEventArgs e) 
{ 
    SizeText.TextChanging += SizeText_TextChanging; 
} 

private void SizeText_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args) 
{ 
} 
+0

残念ながら、これは機能しませんでした。それは私に同じ問題をもたらしました。 SizeText_Loadedのイベントハンドラ登録をコメントアウトすると、まだ問題が中継されているようです。 – Mushriq

+0

パーフェクト!これはx:Bindで動作しました。私はまだこの現象が起こっているのか混乱しています(x:BindとTextChangingも動作しませんでしたが、Loadedイベントを使用することの提案が最初に行いました)。私は学ぶことがたくさんあることを知っています。再度、感謝します! – Mushriq

0

私は同じ問題を抱えていますが、この解決法は私のためには機能しません。 @Mushriqとして、私は_TextChanging()を使用して、フォームの非数値項目を無視します。 しかし私のフォームには、多くの数値フィールドと、これらのフィールドの2つを含むマスターディテールパーツが含まれています。 問題は、部品を初めて表示するときに_Loadedと入力したときですが、他の部品では表示されません。既存のパーツを表示するときに問題はありませんが、新しいパーツを追加すると例外が発生します。 ソリューションを私のケースに適合させる方法はありますか?

関連する問題