ListView での VerticalContentAlignment バインディングエラー

ListView(+ListViewItem) のスタイルをいじってバインディングのエラーが出るのは分かるのですが、予期しないところでエラーが出るので困っていました。今回、ひとまずどういったときにエラーメッセージが出るのかが掴めたのと、今後同じように悩まないためにもメモとして残しておこうと思います。

バインディングエラーと対策

ListView あたりのスタイルをいじっていて以下のようなワーニングメッセージを見ることがありました。特にこの辺りのバインディングいじっていないのに出てしまうので疑問に思っていましたが、起因しているものが分かりました。

このエラーメッセージは、内容が動的に変化するコントロールにおいてよく出るようです。自分の場合には ListView などで仮想化して使っている場合に、このような症状が出るようです。

そこで ListViewItem のプロパティセッターに以下のようにしてパラメータをセットするようにして解決できました。

仮想化ありの場合

仮想化ありの場合においては上記の設定でうまく出来ませんでした。 ListViewItem の中身をカスタムする時に、 Blend を用いて既存のものをコピーして、編集する方法で行いましたが、当初のようなエラーメッセージを見ることになりました。

対策としては以下のように編集しました。

ListViewItem のテンプレートを Blend を用いて既存のものをコピーして作った場合、上記の(※)の部分についてもバインディングが設定されています。しかしそれにより今回のようなバインディングエラーが通知されてしまうため、項目そのものを削除しました。

まとめ

この手のものは、他にも動的な右クリックのメニュー(コンテキストメニュー)を作っているときにも、出遭いそうな気がします。参考情報を見ると、 WPF での既知の問題といえる内容にも見えます。

参考情報


今更ながらに Unity をインストール&入門した

世間では Unity を触っていない人の方が少なくなってきた感がある今日この頃ですが、自分もようやく PC に Unity 2017 をインストールしました。恥ずかしながら、全くといっていいほど触っていなかったのでまずは入門書を買ってきて、そこから始めることにしました。

続きを読む


Linux のしくみ という書籍を買った&読んだ

「試して理解 Linux のしくみ」という本を買いました。今回はタイトルよりも目次を見て買ったタイプです。
最近は”積ん読”が増えてきたので、買ったらまずは流してでも通読しておくように心がけようと思っている今日この頃です。


自分がこの本のいいなと思ったポイントは、物理メモリとのページングの機構が説明されているところでした。図も多用してわかりやすく描かれているように感じました。次点では、ファイルシステム周りの解説がよかったですね。ただいずれも深い内容というには足りない状態なので、この本は入門という位置付けになります。

昔だと 初めて読む 486 が定番でしたし、 Windows 環境なら インサイド Windows のメモリ管理を読むのがよいと思います。ただどちらも初心者が手出しするには難しい内容かと思うので、その前のステップとしてこの本は良さそうに思います。試して理解のとおりコードによる実験を通すので、この部分も自習にはいいかもしれません。

ただ自分としては期待していただけに、内容がやや初心者よりで物足りなさを感じました。悪い本ではないと思いますが、お値段とのバランス考えるとやや高いかなという印象です。


この インサイド Windows もまた随分と古い状態になってしまったので新しいものが出て欲しいですね。書籍の形で買うとなるとプレミア価格になってしまっているようなので、ご注意ください(Kindle版ならほぼ定価っぽいです)


WPF と OpenGL の空域問題への対処

WPF を使っていて厄介な問題の1つに空域の問題があります。特に DirectX や OpenGL, Vulkan といった HWND を使うものを扱って WPF の世界に持ち込むと遭遇します。他にも HWND を必要とする(従来型の)コントロールを配置すると出遭います。ブラウザのコントロールなどが該当するようです。

具体的には HWND を使用したコントロールを配置、ホストすると、その上には WPF のコントロールを配置できません。配置してエラーになるというわけで無く、 HWND のコントロールが最前面に来てしまうため見えない状態となってしまいます。

今までは、描画結果を D3DImage や Image など画像にしてしまって配置する方法を考えていましたが、もっと別の手段があるようだったので試してみることにしました。

続きを読む


低レベルプログラミング

タイトルにつられ気味で、この本を買いました。

タイトルや副題が心に刺さったので買ったのですが、予想通りにいい本だったと思います。
今時珍しい、C言語とアセンブラを繋いでくれる内容となっています。しかも”古くさいC”ではなく”今時のC言語”ですし、 8086 や 486 のアセンブラでは無く、 x64 のアセンブラとなっています。

昔は割と低レベルといえば、以下の書籍が定番だったように思います。

  • はじめて読む486―32ビットコンピュータをやさしく語る
  • はじめて読む8086―16ビット・コンピュータをやさしく語る

これらの現代版といった感じになるのかなという印象でした。

ここのブログを読んでくれているような人は分かっていると思いますが、「低レベルプログラミング」というのはハードウェアに近いレイヤでのプログラミングのことを差しています。最近は書籍の種類も減ってきている中、こういったレイヤの書籍が出てくるのは本当に嬉しく思いました。前に読んだ同類な印象のものは以下の書籍たちでした。

自分としては 30日でできる~のほうが、読みやすかったし読んでいてワクワクした記憶があります。ただどちらもハードウェアに近い部分の話をしてくれているので面白かったですね。


WPF TreeView with SelectedPath binding

Windows エクスプローラーが備えているフォルダツリーのようなものを、 WPF を利用している自作アプリケーションで使用したいことがあります。
調べてみるといくつかの実装が見つかりますが、フォルダツリーの実現のためにビューモデルとビューが分離されている本気度の高いものが多く、もう少し手軽なものがないかなと思った次第です。

以前に以下のアドレスで公開されていた方式が割と気に入っていたのですが、現時点においてアクセスが出来なくなってしまいました。
http://khmylov.com/blog/2010/11/wpf-explorer-treeview-with-selectedpath-binding/

ちょっとしたときにはこれで十分だったりしてお気に入り実装だったので、元の記事を自分なりに再解釈してみたいと思います。

続きを読む


Microsoft Store と Thumbnail Handler

Microsoft ストアでデスクトップアプリも配布できるようになったおかげで、一部のシェル拡張も配布出来るようになりました。
現時点においては、サムネイルハンドラやプレビューハンドラ、プロパティハンドラが対応しているようです。 Paint.Net もストアでの配布が始まり、そのタイミングで tga と dds ファイルのサムネイルハンドラが機能するようになったみたいです。
サムネイルハンドラと聞いて、これはちょっと調べておかないとと思ったので、記録として残しておきます。

情報について

元は Desktop Bridge: Creators Update のブログで書かれた内容が最初でした。
従来のデスクトップアプリをストアで配布出来るように、 Desktop Bridge の機能が用意されました。ここでファイルの関連付けや各ハンドラのようなレジストリの変更が必要なものも対応出来るように機能拡張されて使えるようになりました。

続きを読む


Windows10 で x86/x64 インストールディスクをまとめる その2

以前のチャレンジでは UEFI に対応できていない状態だったので、 UEFI 対応のインストールディスクに出来ないかをチャレンジしてみました。
まずは USB メモリに 32bit, 64bit どちらの UEFI からでも使えるようにデータを構築したいと思います。 ただ多くの環境では 64bit UEFI のため、 32bit のほうは出番が少ないと思います。
たまに 32bit UEFI を搭載している場合があるので、そのときのことを考慮しなければ、 UEFI は 64bit のみ、と割り切ると作業が楽になるかもとは思います。

続きを読む


Windows10 で x86/x64 インストールディスクをまとめる

dism を使って wim を操作している際に、実は x86 版と x64 版のインストールディスクも結合できるのではないかと思ったので挑戦してみました。結果は一部課題が残っていますが、悪くはないのかなと思っています。

準備

それぞれのインストールディスクから中身をコピーしておきます。
とりあえず Fドライブに 32bit のディスクが、 Gドライブに 64bit のディスクがセットされているとして、 d:\work ディレクトリ以下にコピーするコマンドは以下のようになります。

よく使うエディションが Professional のものなのでこれだけを取り出して使用することにします。他のエディションも使いたい場合にはそれのインデックス番号を確認して取り出してください。

このようにして取り出すと、 install.wim よりはファイルサイズが若干小さくなりました。容量をケチる方法として、 export-image を使うことも出来そうな気がします。

続きを読む


Windows7 の WindowsUpdate 適用済みディスクを作る (2018/01版)

当ブログで人気のある記事の1つに「Windows7SP1 ディスクに ロールアップKB3125574 を統合する」 がありますが、これは 2016 年夏のものでした。
今でもこの方法で、うまく結合できることは確認しましたが、ロールアップや累積的な更新プログラムが何度か出ているので、手順も更新したほうが良いと感じたのでまとめ直しました。
以降の内容では、 x64 版で作業していますが、 x86 版でもファイル名などの読み替え程度で適用できるようにしています。

関連記事

作業環境

Windows10 Professional 1703 x64 の環境で本記事の作業を行いました。それ以外の環境で当作業を行う場合には、 dism のバージョンが違うことによるオプションの違いが発生するかと思われます。
また、最後の起動ディスクイメージ作成に oscdimg を使用するために、 Windows ADK をインストールしてあります。この中に含まれる Deployment tools をインストールすると oscdimg が使用可能となりました。
USB メモリに起動ディスクを作成する場合には、 oscdimg は不要です。

続きを読む