0

FileSystemWatcherそのため、プレイリストの作成と更新に使用しています。Windows エクスプローラーの多くの機能を複製したいのですが、最も重要なことは次のとおりです。
* インラインで名前を変更
* ゆっくりダブルクリックして名前を変更

これを行うのはかなり面倒なので、ホイールを再実装するよりも簡単な方法があるのではないかと思いました。Windows Explorer ウィンドウをアプリケーションでコントロールとしてホストすることはできますか?

4

1 に答える 1

2

アプリケーションで実際の Windows エクスプローラー ウィンドウをホストすることは可能ですが、危険が伴います。XP と Vista と Win7 では手法が異なり、あらゆる種類の低レベルのものを扱うことになります。試してみないことを強くお勧めします。

あなたの最良の選択肢は次のとおりだと思います:

  1. 必要に応じて簡単に調整できる場合は、Microsoft.Win32.OpenFileDialog を使用するか、
  2. 独自の機能をコーディングするか、非常に勇気がある場合:
  3. オプションで、その位置とサイズがアプリケーションを超えるように強制しようとするコードを使用して、別のエクスプローラーウィンドウを起動します (これも難しいです...)

インライン名前変更機能に関する注意事項

インラインの名前変更機能とゆっくりダブルクリックして名前を変更する機能は、実装するのが非常に簡単です。

ビューモデルに次を追加します。

  • "NewName" 文字列 DependencyProperty
  • PropertyChangedCallback を持つ「名前変更」bool DependencyProperty。「Renaming」が成立したら、Name を NewName にコピーします。false になると、NewName!=Name の場合、ファイルの名前を更新名に変更します。

DataTemplate で、「Name」にバインドされた TextBlock を「NewName」にバインドされた TextBox に置き換える「Renaming」のトリガーを追加します。

これらのイベント ハンドラーを追加します。 * KeyDown イベント: F2 が押された場合、名前の変更を切り替えます。Enter キーを押して名前を変更する場合は、Renaming=false に設定します。Esc を押して名前を変更すると、Name が NewName にコピーされ、Renaming=false に設定されます。* LostFocus イベント: Set Renaming=false * コンテナーの SelectionChanged イベント: 最後の選択変更のタイムスタンプを記録します。* MouseDown イベント: 左クリックと選択が 0.5 秒以上前に変更された場合、Renaming = true を設定します。

グループ化や複数の列など、エクスプローラー ビューの他の多くの機能も同様に簡単に実装できます。

お役に立てれば。

于 2010-02-12T23:55:04.960 に答える