it技術:dotnet:wpf開発
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
it技術:dotnet:wpf開発 [2017/10/30 18:01] – 作成 yajuadmin | it技術:dotnet:wpf開発 [2017/12/07 18:26] – [メモ] yajuadmin | ||
---|---|---|---|
行 8: | 行 8: | ||
* [[https:// | * [[https:// | ||
* [[http:// | * [[http:// | ||
+ | |||
===== Windows Formsとの違い ===== | ===== Windows Formsとの違い ===== | ||
==== メリット ==== | ==== メリット ==== | ||
行 47: | 行 48: | ||
</ | </ | ||
+ | ==== TextBlockとLabelの違い ==== | ||
+ | TextBlockは文字列のみを表示することができます。一方でLabelの方はContentに与えられる全てのオブジェクトに対応することができます。\\ | ||
+ | [[http:// | ||
+ | |||
+ | ==== 一つの文字列に複数のデータをバインディングしたい場合 ==== | ||
+ | マルチバインディングを使う。\\ | ||
+ | [[https:// | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <Binding Path=" | ||
+ | <Binding Path=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | バインディングするデータが最初に来る場合は、頭に {} を付ける必要があります。(属性値のBindingなどではなく文字として中括弧がつかいたいため) | ||
==== スクロールバーのサイズ取得 ==== | ==== スクロールバーのサイズ取得 ==== | ||
ListViewのスクロールバーのサイズを取得する。\\ | ListViewのスクロールバーのサイズを取得する。\\ | ||
行 62: | 行 82: | ||
[[https:// | [[https:// | ||
+ | ==== ファイル監視で画面表示 ==== | ||
+ | ファイル監視イベントで画面表示処理を呼び出すと「呼び出しスレッドは、多数の UI コンポーネントが必要としているため、STA である必要があります。」が発生する。\\ | ||
+ | [[http:// | ||
+ | |||
+ | UIスレッドで動作させために、下記内で画面表示処理を呼び出す。 | ||
+ | <code csharp> | ||
+ | Application.Current.Dispatcher.Invoke((Action)delegate | ||
+ | </ | ||
+ | |||
+ | <code csharp sample> | ||
+ | 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:// | ||
+ | |||
+ | ==== ListViewの選択背景色を変更する ==== | ||
+ | === XAMLでの変更方法 === | ||
+ | [[https:// | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | <Style TargetType=" | ||
+ | < | ||
+ | <Trigger Property=" | ||
+ | <Setter Property=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | === コードによる変更方法 === | ||
+ | [[https:// | ||
+ | |||
+ | <code csharp> | ||
+ | // 選択時の背景色 | ||
+ | Style styleListViewItem = new Style(typeof(ListViewItem)); | ||
+ | Trigger triggerIsMouseOver = new Trigger { Property = ListViewItem.IsMouseOverProperty, | ||
+ | triggerIsMouseOver.Setters.Add(new Setter(ListViewItem.BackgroundProperty, | ||
+ | styleListViewItem.Triggers.Add(triggerIsMouseOver); | ||
+ | lstRework.ItemContainerStyle = styleListViewItem; | ||
+ | </ | ||
==== メモ ==== | ==== メモ ==== | ||
* [[https:// | * [[https:// | ||
行 71: | 行 192: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// |
it技術/dotnet/wpf開発.txt · 最終更新: 2018/01/17 18:19 by yajuadmin