#author("2017-12-20T19:17:52+09:00","default:wikiwriter","wikiwriter") &tag(WPF/GUI); *目次 [#l6b2b298] #contents *イベント [#aca91b18] **Window Closingイベントを追加する [#g452524e] -xamlのデザイン画面のWindowタグで"Closing"タグを追加。すると自動的に"Window_Closing"ハンドラが作られる。 *ウィンドウサイズ・位置 [#k5b7269b] **Windowのサイズを中身のコントロールのサイズから決定する。 [#p093962e] SizeToContent="WidthAndHeight"を使う。 **Splitterを使う [#tb0312d2] -[[XAMLとSplitter:http://prorom.sakura.ne.jp/wp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/xaml%E3%81%A8splitter/]] -GridSplitterでStrechを指定しないとXAMLデザイナ上ではsplitterがあるようにみえても操作できなくなってしまうので注意。 *メッセージボックス [#l68e1746] -[[MessageBox クラス (System.Windows):https://msdn.microsoft.com/ja-jp/library/system.windows.messagebox(v=vs.110).aspx]]を使用する。 MessageBox.Show("Hello World"); *リストボックス [#e8791f5c] **リストボックスをインクリメンタルにフィルタリング [#f47b5b6f] -[[Filter data in a WPF ListBox:http://www.devcurry.com/2010/07/filter-data-in-wpf-listbox.html]] -[[c# - Silverlight ListBox with ObservableCollection<T> and dynamic filter - Stack Overflow:http://stackoverflow.com/questions/3732145/silverlight-listbox-with-observablecollectiont-and-dynamic-filter]] -[[c# - WPF ICollectionView Filter Reset - Stack Overflow:http://stackoverflow.com/questions/3520653/wpf-icollectionview-filter-reset]] *Master/Detail [#f4661b89] ***詳細ページを切り替える [#s4a7a5a5] -[[.NET - WPF: Master/Detail situation - efreedom:http://efreedom.com/Question/1-2671179/WPF-Master-Detail-Situation]] *ダイアログ [#v3717e61] **コモンダイアログ [#ja5ec9a9] -[[../コモンダイアログ]] **アバウトダイアログを作る [#dda41b80] バージョン情報などを表示するダイアログのひな形は用意されていないので自分でがんばってつくるしかないらしい。以下のリンクが参考になる。 -[[[WPF] がんばってバージョン情報ダイアログ作ってみた - www.be-styles.jp:http://www.be-styles.jp/archives/3800]] -[[バージョン情報ダイアログの作り方 - こげつきません:http://d.hatena.ne.jp/t-katochin/20100625/1277444950]] バージョン情報そのものの取得方法 -[[Version Class (System):http://msdn.microsoft.com/en-us/library/system.version.aspx]] アイコンの取得方法 -[[.NETプログラミング挑戦記 アイコンの読み込み 〜クイック起動バーの開発(5)〜:http://hiragino.blog74.fc2.com/blog-entry-8.html]] *その他 [#p2f5c90c] **IsSynchronizedWithCurrentItemとは何か [#haafd7d5] ***参考情報 [#oeb4f635] -[[Selector.IsSynchronizedWithCurrentItem プロパティ (System.Windows.Controls.Primitives):http://msdn.microsoft.com/ja-jp/library/system.windows.controls.primitives.selector.issynchronizedwithcurrentitem.aspx]] -[[Twitterクライアントつくってみるblog: 番外編 IsSynchronizedWithCurrentItemのメモ:http://wtwitter.blogspot.com/2010/05/issynchronizedwithcurrentitem.html]] ***一応わかったこと [#be3b6eb4] -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()されたものがセットされる現象が発生した。原因不明すぎる。 **デフォルトのコントロールテンプレートの値を表示する [#u2c06f09] -[[[WPF]コントロール・テンプレートの既定の内容を見るには? − @IT:http://www.atmarkit.co.jp/fdotnet/dotnettips/970showtemplate/showtemplate.html]] **アプリケーションのアイコンを変更する [#gc6a5f0f] -icoファイルは[[IcoFX]]等で作成する。 -プロジェクトのプロパティ→アプリケーション→アイコンとマニフェストでアイコンファイルを指定する。ここで指定したファイルはエクスプローラーでexeファイルに表示されるアイコンになる。 -<Window Icon="...>で指定する。ここで登録するとウィンドウの左上のアイコンとタスクバーに表示される。 ※[[WPFでアイコンを指定する方法 - たこにありがちなこと。:http://d.hatena.ne.jp/tako222/20090829/1251538730]] **Windowメッセージを処理する [#e86a8a7f] -[[[C#][WPF] WPFでWndProcイベントをキャプチャーする:http://www.ipentec.com/document/document.aspx?page=wpf-wndproc-capture]] **なぜOnDataContextChanged…メソッドがないか [#z91c27c8] -[[c# - WPF - Why there is no "OnDataContextChanged" overridable method? - Stack Overflow:http://stackoverflow.com/questions/1293876/wpf-why-there-is-no-ondatacontextchanged-overridable-method]] *トラブルシューティング [#o49c10ec] **TextBoxの幅が高くなる [#v51cce12] -例えばGridの行にTextBoxとButtonを並べ、Buttonにマージンを設定すると、TextBoxの高さがそれに釣られて高くなってしまう。TextBoxのほうにも同じ量のマージンを設定するしかないかも。