プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

Recyclingを指定したWPFのTreeViewでShowLinesな表示にする

Recycling指定でも正常に動作する版の、完全なサンプルコードは最後に載せています。

確認環境

  • Visual Studio: Community 2013
  • プロジェクトの対象のフレームワーク: .NET Framework 4.5
  • PCにインストールしているフレームワーク: .NET Framework 4.5.51209

概要

  1. WinFormsのTreeView.ShowLinesプロパティをtrueにした時と同じような表示を、WPFでも行いたい
  2. stackoverflowでコード片を見つけた
  3. 紹介されている内容で一見上手く動くけれど、VirtualizingPanel.VirtualizationModeをRecyclingに指定すると、表示がおかしくなる場合がある
  4. Headerプロパティ更新時にも表示を更新するようにして解決した
続きを読む

Directory.EnumerateFilesでハマった話

指定ディレクトリ以下の指定拡張子の列挙に便利な System.IO.Directory.EnumerateFiles メソッド。
しかし、searchPattern引数に指定していない拡張子も列挙される場合があります。

2015/11/10追記: MSDN日本語版に改めてアクセスしてみると、解説中の「メモ」の欄にて、この記事で紹介している内容が記載されていました。(ただしラジオボタンの訳文を選択していてもその辺りは英語オンリーです。機械翻訳とは一体。)
というわけで、この記事の存在意義は非常に怪しくなりました。

続きを読む

Livetでウィンドウが閉じられるときに確認ダイアログを出し、その応答で別の処理をしたりキャンセルしたりする方法

サンプルコードは最後に載せています。
2015/05/17 サンプルコードをコールバックを使用しない内容に差し替え。

確認環境

  • Visual Studio: Community 2013
  • Livet: 1.2.0
  • プロジェクトの対象のフレームワーク: .NET Framework 4.5
  • PCにインストールしているフレームワーク: .NET Framework 4.5.51209

背景

notepad.exeにて、テキストを編集した状態でウィンドウを閉じようとすると確認ダイアログが表示される。
確認ダイアログの結果によって、ウィンドウを閉じることがキャンセルされたり、閉じる前に別の操作(ここではファイルの保存)が行われる。
同じことをLivetを使ったWPFアプリケーションでも行いたい。

続きを読む

読み取り不可なStreamの作り方

背景

  • 某ファイルフォーマット用のBinaryReaderクラスを作った。
  • コンストラクタで受けるStreamがunreadableならArgumentExceptionを投げている。
  • これの単体テストを書きたい。

実現方法

Stream.CanRead プロパティ (System.IO) | Microsoft LearnはClose後ならfalseを返すので、それを利用する。

続きを読む

KeySnailのHoKで候補が1つの場合でもヒントを表示させ、自動では開かせない

http://lab.designsatellites.jp/?p=1173を見て、HoKを導入してみました。
(現時点ではバージョンは 1.2.7 (2011 01/01) です。)

少し試してみたところ、「eなどのKeyDown時、URLの候補が1つの場合はヒントを表示せず自動で開く」ようになっていました。
誤爆が怖いので、候補が1つの場合でもヒントを表示するようにしました。

おもむろにhok.ks.jsを開き、1240行目辺りを見ます。

if (hintCount > 1)
{
    document.addEventListener('keydown', stopEventPropagation, true);
    document.addEventListener('keypress', onKeyPress, true);
    document.addEventListener('keyup', stopEventPropagation, true);
}

ifの条件を `hintCount >= 1` に変更すれば完了です。

TreeViewのControlTemplateにScrollViewerを入れたらUIの仮想化が動かなかった話とその対処法

2015/04/13追記 Win7 64bitマシンで、プロジェクトの対象のフレームワークを.Net4.5として、マシンには.Net4.5.2をインストールした状態で、仮想化したTreeViewの要素をExpandしたときにスクロール位置が狂う(Expandした要素やその子供が範囲外に隠れる)現象を確認しています。 恐らく https://connect.microsoft.com/VisualStudio/feedback/details/783812/c-wpf-treeview-virtualized-issue-with-treeview-scrolling-on-item-expanded と同様の現象です。

2015/05/24追記 スクロールバーをマウス操作している時に、UIが完全にフリーズする現象が発生しました。https://connect.microsoft.com/VisualStudio/feedback/details/790241/mousescrooll-freezes-virtualizingpanel-if-isvirtualizingwhengrouping-and-scrollunit-pixel-set で言及されているように、`VirtualizingPanel.ScrollUnit="Item"`と指定したところ、今のところは再発していません。

続きを読む