概要
一般的に、private setter を持つプロパティを TwoWay Binding すると、InvalidOperationException が発生して死ぬ。
しかし、ターゲットフレームワークが 4.5 の時のみ、何事もなかったかのように動作する。なにそれ……
※ OneWayToSource の場合も同様。
一般的に、private setter を持つプロパティを TwoWay Binding すると、InvalidOperationException が発生して死ぬ。
しかし、ターゲットフレームワークが 4.5 の時のみ、何事もなかったかのように動作する。なにそれ……
※ OneWayToSource の場合も同様。
条件をよく忘れるのでメモ。
ItemsPanel
が VirtualizingPanel
であること
VirtualizingStackPanel
VirtualizingPanel.IsVirtualizing
が True
(既定値) であることScrollViewer.CanContentScroll
が True
であること
False
VirtualizingPanel.IsVirtualizingWhenGrouping
も True
にListView
なんかは初めから仮想化有効だけど、Template 弄る時なんかに無効化されてしまったりするので注意
VirtualizingPanel.VirtualizationMode
は Recycling
に
VirtualizingPanel.ScrollUnit
は Pixel
に
Item
はスクロールしてる感乏しいとりあえず簡単に。
ちゃんとしたのはそのうち気が向いたら書くかも。
でも既存開発者はわかってる人たちだからこれでも十分な気が……
新規開発も追々。
むしろちゃんと書くべきはこっち。。
KanColleViewer 4.0 がリリースされましたが、プラグインシステムが刷新されたため、3.x のプラグインは利用できなくなりました。
Release version 4.0 · Grabacr07/KanColleViewer
プラグイン システムの刷新 (version 3.8.2 またはそれ以前に向けて作られたプラグインは使用できなくなります)
というわけで、3.x プラグインをどう移行すればいいかを 雑に 簡単に説明します。
実際のコードは、本体に付属しているプラグインの実装などを参考にすると良いでしょう。
グループ化したい時はControlTemplate
にItemsPresenter
を使わないとダメっぽい
また、ItemsPanel を指定せず、前述の ControlTemplate でコレクション項目の並べ方を指定する方法もあります。ControlTemplate 内に ItemsPresenter を配置する代わりに、Panel の派生クラスを指定し、IsItemsHost プロパティに True を設定します。
のだけども、グループ化して表示したい場合うまく表示されない。
※実際やりたかったこととは違うけど例なので……
めとべや東京 #7 で話したやつです。
そのままだとdot by dotに表示されず、モヤッとすることがある。
ルート要素の UseLayoutRounding
を true に設定すればOK。
参考:
WPFにてアクティブなウィンドウが無い状態で引数のowner
を指定せずにMessageBox.Show()した場合、メッセージボックスは非モーダルな状態で表示される。
通信等をトリガーにして通知を行う場合などで発生するケース。
参考: MessageBox.cs
モーダルな状態で表示するには、Window.Activate()
でウィンドウをアクティブにしてしまうか、MessageBox.Show()
の引数でowner
となるWindow
を指定すれば良い。