Tag: WPF/GUI
ウィンドウサイズ・位置†
Windowのサイズを中身のコントロールのサイズから決定する。†
SizeToContent="WidthAndHeight"を使う。
Splitterを使う†
- XAMLとSplitter
- GridSplitterでStrechを指定しないとXAMLデザイナ上ではsplitterがあるようにみえても操作できなくなってしまうので注意。
メッセージボックス†
リストボックス†
リストボックスをインクリメンタルにフィルタリング†
Master/Detail†
詳細ページを切り替える†
ダイアログ†
コモンダイアログ†
アバウトダイアログを作る†
バージョン情報などを表示するダイアログのひな形は用意されていないので自分でがんばってつくるしかないらしい。以下のリンクが参考になる。
バージョン情報そのものの取得方法
アイコンの取得方法
その他†
IsSynchronizedWithCurrentItemとは何か†
参考情報†
一応わかったこと†
- ListBoxやComboBoxではIsSynchronizedWithCurrentItemが設定できる。
- 本来同じデータソース(ItemsSource)にバインドしたコントロール間で同じものを同時に選択状態にするために使用するものらしい(MSDNのリファレンスによる)。
- しかし、IsSynchronizedWithCurrentItem=trueの状態では、SelectedItemが選択された項目と常に同期するが、他の状態では、フォーカスが外れたタイミングじゃないと同期しないとかいろいろ挙動の違いがあるらしい。
- SelectedItemが変わらない=CurrentChangingイベントが発行されないなど関連する挙動もいろいろ変わるので注意が必要と思われる。
- DataGridの行編集用にComboBoxをのせたり、TabControlの上にComboBoxをのせたりする場合、そのComboBoxのItemsSourceが共通になる場合、IsSynchronizedWithCurrentItem=Trueだとまずいことになりそう。
- TabControlの上にComboBoxをのせそのIsSynchronizedWithCurrentItemをうっかりTrueにしていたとき、SelectedValueにSelectedValuePathが考慮されない、ItemsSourceのここのオブジェクトのToString()されたものがセットされる現象が発生した。原因不明すぎる。
デフォルトのコントロールテンプレートの値を表示する†
アプリケーションのアイコンを変更する†
- プロジェクトのプロパティ→アプリケーション→アイコンとマニフェストでアイコンファイルを指定する。ここで指定したファイルはエクスプローラーでexeファイルに表示されるアイコンになる。
- <Window Icon="...>で指定する。ここで登録するとウィンドウの左上のアイコンとタスクバーに表示される。
※WPFでアイコンを指定する方法 - たこにありがちなこと。
Windowメッセージを処理する†
なぜOnDataContextChanged…メソッドがないか†
トラブルシューティング†
TextBoxの幅が高くなる†
- 例えばGridの行にTextBoxとButtonを並べ、Buttonにマージンを設定すると、TextBoxの高さがそれに釣られて高くなってしまう。TextBoxのほうにも同じ量のマージンを設定するしかないかも。