it技術:dotnet:wpf開発
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
it技術:dotnet:wpf開発 [2017/10/30 18:01] – [WPFとは] yajuadmin | it技術:dotnet:wpf開発 [2017/11/21 11:34] – [Bindingのソースが更新されない] yajuadmin | ||
---|---|---|---|
行 8: | 行 8: | ||
* [[https:// | * [[https:// | ||
* [[http:// | * [[http:// | ||
- | |||
===== Windows Formsとの違い ===== | ===== Windows Formsとの違い ===== | ||
行 49: | 行 48: | ||
</ | </ | ||
+ | ==== TextBlockとLabelの違い ==== | ||
+ | TextBlockは文字列のみを表示することができます。一方でLabelの方はContentに与えられる全てのオブジェクトに対応することができます。\\ | ||
+ | [[http:// | ||
+ | |||
+ | ==== 一つの文字列に複数のデータをバインディングしたい場合 ==== | ||
+ | マルチバインディングを使う。\\ | ||
+ | [[https:// | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <Binding Path=" | ||
+ | <Binding Path=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | バインディングするデータが最初に来る場合は、頭に {} を付ける必要があります。(属性値のBindingなどではなく文字として中括弧がつかいたいため) | ||
==== スクロールバーのサイズ取得 ==== | ==== スクロールバーのサイズ取得 ==== | ||
ListViewのスクロールバーのサイズを取得する。\\ | ListViewのスクロールバーのサイズを取得する。\\ | ||
行 63: | 行 81: | ||
==== タスクトレイ常駐アプリ ==== | ==== タスクトレイ常駐アプリ ==== | ||
[[https:// | [[https:// | ||
+ | |||
+ | ==== ファイル監視で画面表示 ==== | ||
+ | ファイル監視イベントで画面表示処理を呼び出すと「呼び出しスレッドは、多数の UI コンポーネントが必要としているため、STA である必要があります。」が発生する。\\ | ||
+ | [[http:// | ||
+ | |||
+ | UIスレッドで動作させために、Application.Current.Dispatcher.Invoke((Action)delegate内で画面表示処理を呼び出す。 | ||
+ | <code csharp> | ||
+ | private void watcher_Changed(Object source, FileSystemEventArgs e) | ||
+ | { | ||
+ | switch (e.ChangeType) | ||
+ | { | ||
+ | case WatcherChangeTypes.Changed: | ||
+ | case WatcherChangeTypes.Created: | ||
+ | Application.Current.Dispatcher.Invoke((Action)delegate { | ||
+ | MainWindowShow(); | ||
+ | }); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 表示文字幅の取得 ==== | ||
+ | 画面に表示される文字の幅を取得する。\\ | ||
+ | [[http:// | ||
+ | |||
+ | <code csharp sample> | ||
+ | Typeface typeface = new Typeface(txtTest.FontFamily, | ||
+ | double len = MeasureString(" | ||
+ | |||
+ | /// < | ||
+ | /// 表示文字幅を取得する | ||
+ | /// </ | ||
+ | /// <param name=" | ||
+ | /// <param name=" | ||
+ | /// <param name=" | ||
+ | /// < | ||
+ | private Size MeasureString(string text, double fontSize, Typeface typeface) | ||
+ | { | ||
+ | var ft = new FormattedText(text, | ||
+ | | ||
+ | | ||
+ | |||
+ | return new Size(ft.Width, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Buttonのクリックイベントを発生させる ==== | ||
+ | WPFには、Windows FormにあったPerformClickメソッドが存在しない。\\ | ||
+ | IInvokeProviderインターフェースを利用するには、参照の追加の参照マネージャーのアセンブリから「UIAutomationProvider.dll」を参照する。\\ | ||
+ | [[http:// | ||
+ | [[http:// | ||
+ | |||
+ | ==== 最大化を禁止させる ==== | ||
+ | <code csharp sample> | ||
+ | // | ||
+ | this.ResizeMode = ResizeMode.CanMinimize; | ||
+ | </ | ||
+ | [[http:// | ||
+ | |||
+ | ==== Bindingのソースが更新されない ==== | ||
+ | ViewModelにINotifyPropertyChangedインターフェイスを実装する必要がある。\\ | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | INotifyPropertyChangedを実装はイケてないので、ReactivePropertyを使用する。\\ | ||
+ | NuGetから「ReactiveProperty 3.6.0」で入手する。 | ||
+ | |||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | |||
==== メモ ==== | ==== メモ ==== | ||
行 73: | 行 162: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// |
it技術/dotnet/wpf開発.txt · 最終更新: 2018/01/17 18:19 by yajuadmin