it技術:dotnet:wpf開発
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| it技術:dotnet:wpf開発 [2017/10/30 18:01] – [WPFとは] yajuadmin | it技術:dotnet:wpf開発 [2018/01/17 18:19] (現在) – [Shownイベント] 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のスクロールバーのサイズを取得する。\\ | ||
| 行 64: | 行 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; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 画面表示時の例外エラー ==== | ||
| + | 例外エラー「' | ||
| + | |||
| + | フォームインスタンスを再利用するとでる。 | ||
| + | * 他のフォームをnewする | ||
| + | * ShowModalで開く | ||
| + | * そのフォームを閉じる | ||
| + | * new済みなので、再度ShowModalで開く | ||
| + | |||
| + | 対応方法 | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | <code csharp> | ||
| + | private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) | ||
| + | { | ||
| + | e.Cancel = true; | ||
| + | this.Visibility = Visibility.Hidden; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Shownイベント ==== | ||
| + | WPFにはWindowが最初に表示されたときのShownイベントが無いので、代わりにContentRenderedイベントを利用する。\\ | ||
| + | [[https:// | ||
| + | ==== 表示文字幅の取得 ==== | ||
| + | 画面に表示される文字の幅を取得する。\\ | ||
| + | [[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:// | ||
| 行 73: | 行 217: | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
it技術/dotnet/wpf開発.1509354119.txt.gz · 最終更新: 2017/10/30 18:01 by yajuadmin
