[解決済み] Windows Phone 7エミュレータでTextBox.TextChangedイベントが2回発生する。
質問
Windows Phone 7 で遊ぶための、非常に簡単なテスト アプリがあります。私はちょうど
TextBox
と
TextBlock
を標準のUIテンプレートに追加します。カスタムコードは以下のものだけです。
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
}
private int counter = 0;
private void TextBoxChanged(object sender, TextChangedEventArgs e)
{
textBlock1.Text += "Text changed " + (counter++) + "\r\n";
}
}
は
TextBox.TextChanged
イベントは
TextBoxChanged
に配線されています。
<TextBox Height="72" HorizontalAlignment="Left" Margin="6,37,0,0"
Name="textBox1" Text="" VerticalAlignment="Top"
Width="460" TextChanged="TextBoxChanged" />
しかし、エミュレータで実行中にキーを押すたびに (画面上のキーボードでも物理キーボードでも、後者を有効にするためにポーズを押して) カウンタが 2 回増分し、2 行が
TextBlock
. 私が試したすべてが、イベントが純粋に2回発生していることを示し、私はその理由がわかりません。私は、それが一度だけ登録されていることを確認しました。
MainPage
コンストラクタで登録を解除すると、テキストが変更されたときに (テキスト ブロックに) 何も起こりません。
私は通常の Silverlight アプリで同等のコードを試しましたが、そこでは発生しませんでした。今のところ、これを再現するための物理的な電話機は持っていません。Windows Phone 7 では、これが既知の問題であるという記録は見つかりませんでした。
どなたか、何が間違っているのか説明していただけませんか、それともこれをバグとして報告すべきでしょうか。
編集: テキストコントロールが 2 つあることが原因である可能性を減らすために、私は
TextBlock
を完全に削除し、TextBoxChanged メソッドを
に変更してみました。
インクリメント
counter
. その後、エミュレータで実行し、10文字を入力し
と表示されます。
にブレークポイントを置く。
counter++;
行にブレークポイントを設定します (デバッガに侵入することが問題を引き起こしている可能性を排除するためです)。
counter
を 20 と表示します。
編集:私は今 を Windows Phone 7 フォーラムで尋ねました。 ... 何が起こるか見てみます。
どのように解決するのですか?
の理由は
TextChanged
イベントが 2 回発生するのは、WP7 では
TextBox
が Metro の外観のためにテンプレート化された副作用です。
を編集すると
TextBox
テンプレートをBlendで編集すると、このテンプレートに副次的な
TextBox
が含まれていることがわかります。これにより、副作用としてイベントが2回発生することになります。
テンプレートを変更することで、余分な
TextBox
(および関連する状態) を削除するか、あるいは、無効/読み取り専用状態で別の外観を実現するためにテンプレートを変更し、二次的な
TextBox
.
これで、イベントは一度だけ発生するようになります。
関連
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] 2つのリストを結合する
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] 関数を終了するには?
-
[解決済み】WebResource.axdとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015