&tag(WPF/GUI);
ウィンドウサイズ・位置†[edit]
Windowのサイズを中身のコントロールのサイズから決定する。†[edit]
SizeToContent="WidthAndHeight"を使う。
Splitterを使う†[edit]
- XAMLとSplitter
- GridSplitterでStrechを指定しないとXAMLデザイナ上ではsplitterがあるようにみえても操作できなくなってしまうので注意。
メッセージボックス†[edit]
リストボックスをインクリメンタルにフィルタリング†[edit]
Master/Detail†[edit]
詳細ページを切り替える†[edit]
アバウトダイアログを作る†[edit]
バージョン情報などを表示するダイアログのひな形は用意されていないので自分でがんばってつくるしかないらしい。以下のリンクが参考になる。
バージョン情報そのものの取得方法
アイコンの取得方法
IsSynchronizedWithCurrentItemとは何か†[edit]
- 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()されたものがセットされる現象が発生した。原因不明すぎる。
デフォルトのコントロールテンプレートの値を表示する†[edit]
アプリケーションのアイコンを変更する†[edit]
- icoファイルはIcoFX等で作成する。
- プロジェクトのプロパティ→アプリケーション→アイコンとマニフェストでアイコンファイルを指定する。ここで指定したファイルはエクスプローラーでexeファイルに表示されるアイコンになる。
- <Window Icon="...>で指定する。ここで登録するとウィンドウの左上のアイコンとタスクバーに表示される。
※WPFでアイコンを指定する方法 - たこにありがちなこと。
Windowメッセージを処理する†[edit]
なぜOnDataContextChanged…メソッドがないか†[edit]
トラブルシューティング†[edit]
TextBoxの幅が高くなる†[edit]
- 例えばGridの行にTextBoxとButtonを並べ、Buttonにマージンを設定すると、TextBoxの高さがそれに釣られて高くなってしまう。TextBoxのほうにも同じ量のマージンを設定するしかないかも。