私はWPFアプリケーションでユーザーの非アクティブとアクティビティを処理して、いくつかのものをフェードインまたはフェードアウトしようとしています。多くの研究の後、私は(少なくとも私の意見で)非常にエレガントなソリューションハンスパサントと一緒に行くことに決めたhereを投稿しました。WPFの非アクティブとアクティビティ
カーソルがウィンドウの上にとどまっている限り、PreProcessInput
イベントは連続して発生します。私はフルスクリーンのアプリケーションを持っているので、これはそれを殺す。どのように私はこの動作を回避することができますすべてのアイデアは、最も感謝される。
public partial class MainWindow : Window
{
readonly DispatcherTimer activityTimer;
public MainWindow()
{
InitializeComponent();
InputManager.Current.PreProcessInput += Activity;
activityTimer = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(10),
IsEnabled = true
};
activityTimer.Tick += Inactivity;
}
void Inactivity(object sender, EventArgs e)
{
rectangle1.Visibility = Visibility.Hidden; // Update
// Console.WriteLine("INACTIVE " + DateTime.Now.Ticks);
}
void Activity(object sender, PreProcessInputEventArgs e)
{
rectangle1.Visibility = Visibility.Visible; // Update
// Console.WriteLine("ACTIVE " + DateTime.Now.Ticks);
activityTimer.Stop();
activityTimer.Start();
}
}
更新
Iは、(上記のコードでrectangle1.Visibility
更新を参照)より良好な説明行動を絞り込むことができました。カーソルがウィンドウの上に載っていて、たとえばコントロールのVisibility
が変更されている場合は、PreProcessInput
が発生します。たぶん私はPreProcessInput
イベントの目的と発生時を誤解しています。 MSDNはあまり役に立ちませんでした。
そのコードは私にとってはうまく機能し、 'PreProcessInput'はマウスがまだ' Window'の上にあるときは生成されません。投稿したコードだけで小さなアプリを作成しても同じ効果が得られますか?どの.NETバージョンを使用していますか? –
@Meleak:ありがとう!確かに、それはちょうど上記のコード(私の上に恥)で動作します。とにかく、私のプロジェクトでは、私はまだその変な振る舞いをしています。私はこれをさらに研究して絞り込み、より詳細な情報を提供します。完全性のために、.NET 4を使用しています。 –
@Meleak:動作を実際に理解できるように質問を更新しました。 –