1

MouseDoubleClick イベントで次のコードを使用して最大化する WPF ウィンドウを (とりわけ) 含むプログラムに取り組んでいます。

       this.WindowStyle = WindowStyle.None;            
       this.WindowState = WindowState.Maximized;      
       this.Topmost = true;  

今、私がやりたいことは、ウィンドウが最大化され、マウスが画面を終了すると (画面を終了するまで画面の下部に移動する)、画面の下部に新しいウィンドウが表示されることです (WPF または WindowsForm)これにはいくつかのもの(ボタン、スクロールバーなど)が含まれ、マウスがその上にある間だけアクティブになります(BSplayerのように)。私の質問はそれを行う方法ですか?私は本当に WPF の初心者で、XAML を知りません。C# コードを使用してできる限りのことをしたいと思っています。では、マウスが画面から離れたことをどのように確認し、そのウィンドウを画面の下部に表示するにはどうすればよいでしょうか (元のウィンドウを最小化したり、他の操作を行ったりする必要はありません)。this.MouseLeave を使用してみましたが、ウィンドウを最大化すると機能しません。

ここでこの質問をする場合は、この機会を利用して、他にも 2 つのことを尋ねます。

  1. WPF ウィンドウが最大化され、マウスが 5 秒以上動かされていない場合、マウスを非表示にして、マウスが移動したときにのみ再び表示されるようにします。これを行うにはどうすればよいですか?
  2. WPFウィンドウが最大化されていない場合、画面の境界線を非常に小さくして、ほとんど見えないようにしたい(最小化、閉じる、またはその他のボタンはありません)。私は this.WindowStyle = System.Windows.WindowStyle.ToolWindow を使用していますが、まだ終了/閉じるボタンが残っています。this.WindowStyle = System.Windows.WindowStyle.None を使用すると完璧に見えますが、ウィンドウを移動できません。とにかく WindowStyle.None でウィンドウを移動可能にするためにそこにいますか? できれば、画面の内側でマウスを押したままにすると、画面上で WPF ウィンドウをドラッグできるようにしたいと考えています。

これらの問題には本当に助けが必要です。私が取り組んでいる非常に重要なプロジェクトです。

4

1 に答える 1

1

この質問への回答

WPF ウィンドウが最大化され、マウスが 5 秒以上動かされていない場合、マウスを非表示にして、マウスが移動したときにのみ再び表示されるようにします。これを行うにはどうすればよいですか?

これは、5 秒間隔のタイマーを使用することで実現できます。タイマーが経過したらマウスカーソルをNoneに設定して非表示にし、マウスが移動するとマウスカーソルを元に戻します。

以下のコードをコンストラクターに入れます。

 this.MouseMove += new MouseEventHandler(MainWindow_MouseMove);
        tm = new System.Timers.Timer();
        tm.Interval = 5000;
        tm.Elapsed += new System.Timers.ElapsedEventHandler(tm_Elapsed);
        tm.Start();

以下はイベントの定義です。

void MainWindow_MouseMove(object sender, MouseEventArgs e)
    {
        tm.Stop();
        tm.Start();

        // Reseting the time back to original. Here I have assumed that original one is Arrow.
        this.Dispatcher.Invoke(new Action(() =>
        {
            Mouse.OverrideCursor = Cursors.Arrow;
        }));
    }

    void tm_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {

        this.Dispatcher.Invoke(new Action(() =>
        {
            if (Mouse.OverrideCursor != Cursors.None)
            {
                Mouse.OverrideCursor = Cursors.None;
                currentCursor = Mouse.OverrideCursor;
            }
        }));
    }

お役に立てれば !!

于 2013-07-29T08:12:52.093 に答える