コントールの基本的なこと
- UIElement
Windowsのメッセージを受け取る構成パーツをコントロールと呼んできたが、どうも不適切なようだ。共通の親クラスは、Controlではなく、UIElementが適切なようだ。Borderの親にControlがないことに気が付いた。
- コントロールが表示されているか (描画されているか)
ListBoxの表示範囲より外にある(スクロールして表示される)行は、下記の位置取得などに失敗する。PresentationSourceに接続されていないと言うエラーになる。表示範囲外のコントロールは、
control.IsVisible
が、false になる。
ただし、このフラグは一度表示すると、trueになり、表示エリアから出てもfalseにはならない。
- コントロールが表示されているか (見えているか)
座標を調べる以外の方法は、今のところ分からない。
- コントロールが表示されているか (スクロール範囲内か)
これは、control.IsVisible と、座標を調べる。
- コントロールの位置
Point point = control.PointToScreen(new Point());
- UpdateLayout()
ListBoxで選択行を中央に表示したいと考えた。ListBoxのScrollIntoView()で、表示はできるが中央にはこない。そこで、ScrollIntoView()で移動した位置からさらにLineUp()、LineDown()で調整する。このとき、ScrollIntoView()の実行後の位置が欲しいが、非同期なので直後では取得できない。UpdateLayout()を呼ぶことで、値が取得できるようになる。
- OwnedWindows
System.Windows の Window.OwnedWindows は、たくさん子ウインドウを開くアプリケーションで有用。 |
|