それはあなたが何をしたいのか本当にはっきりしていません。
メインのアプリケーションスレッドでスリープ状態にするのは良い考えではありません。これは、アプリケーションがすべてのWindowsメッセージ(ユーザーまたはWindows自体によって生成される)に対して応答しなくなるようにします。ユーザーがハングアップします。
このボタンだけを無効にする必要がある場合は、IsEnabled
プロパティをfalse
に設定すると、ユーザーはそのボタンをクリックできません。
すべてのイベントを無効にする場合は、ウィンドウ自体のIsEnabled
プロパティを使用できます。
すべてのコントロール(または1つのボタン)を無効にするのが適切なソリューションでない場合は、次のいずれかを使用できます。
状態変数(または単純なフラグ)を追加します。すべてのイベントハンドラで、その変数が真であるかどうかをチェックします(タイマーで変更します)。ような何か:
if (!_canHandleMouseClicks)
return false;
無効にし、一定期間後にすべてのボタンと再度有効にそれら:
private static IEnumerable<Button> FindAllButtons(DependencyObject obj)
{
if (obj == null)
return null;
int childrenCount = VisualTreeHelper.GetChildrenCount(obj);
for (int i = 0; i < childrenCount; ++i)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is Button)
yield return (Button)child;
// If you may have buttons inside buttons then uncomment these lines
//foreach (Button childOfChild in FindAllButtons(child))
// yield return childOfChild;
}
}
次にあなたが書くことができます。
foreach (Button button in FindAllButtons(window))
button.IsEnabled = false; // true to re-enable
あなたがいないのであればあなたが疑問に思う必要があります – Kolky
@Kolky - 私もそうだと思っていましたが、時には顧客が奇妙なことを尋ねています:)ボタンが再び有効になっていれば、再入力されない 'というメッセージが表示されます。どちらか、または入力を操作にキューイングすると、ボタンをまったく無効にする必要はありません。 –
はい、私はボタンをクリックした後にClick forボタンを無効にして何か間違っていません。わずかな時間しかかかりません。私はいくつかのユーザーインターフェイスの目的のために、このコードが必要です。 – hakunabean