XAML と C# を使用して Windows 8 アプリを開発しています。ComboBox に問題があり、それを示す簡単な例があります。
以下をレイアウト対応ページ (New BasicPage) に追加します。
<ComboBox x:Name="comboBox1" DropDownClosed="comboBox1_DropDownClosed" Visibility="Collapsed" HorizontalAlignment="Left" Margin="179,217,0,0" Grid.Row="1" VerticalAlignment="Top" Width="998" Height="51"> <x:String>Option 1</x:String> <x:String>Option 2</x:String> <x:String>Option 3</x:String> </ComboBox> <Button Click="Button_Click" Margin="585,130,0,416" Grid.Row="1" Height="82" Width="154"> <Viewbox> <TextBlock Text="Press Me" /> </Viewbox> </Button>
これをページの CodeBehind に追加します
private void Button_Click(object sender, RoutedEventArgs e) { comboBox1.Visibility = Windows.UI.Xaml.Visibility.Visible; comboBox1.IsDropDownOpen = true; } private void comboBox1_DropDownClosed(object sender, object e) { comboBox1.Visibility = Windows.UI.Xaml.Visibility.Collapsed; }
想定: ボタンが押されると、ComboBox が表示され、オプションが展開され、ユーザーがいずれかを選択できるようになります。ユーザーがオプションを選択すると、ComboBox は消えます。
実際の結果: ボタンを押しても何も起こりません。ボタンをもう一度押すと、ComboBox が異常な状態で表示され、アプリは基本的に応答しなくなります。(すべての入力は ComboBox に送られ、決して閉じません。
注: DropDownClosed イベントは、Button_Click イベントの直後に発生します。イベント ハンドラーを削除しても何も変わりませんが、興味深いことに、DropDownClosed イベントが発生しています。
拒否された解決策:変更が有効になった後Dispatcher.RunAsync
に設定
するように提案されました。一部の時間しか機能しないため、これは競合状態のようです。ComboBox が表示されたことを確認する方法があれば、このチェックを RunAsync メソッドに追加することで問題を解決できる可能性があります。IsDropDownOpen
Visibility
回避策として、現在 Dispatcher.RunAsync を 200 ミリ秒遅らせていますが、これは面倒な回避策です。他のアイデアはありますか?