it技術:dotnet:wpf開発
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
it技術:dotnet:wpf開発 [2017/11/10 16:35] – yajuadmin | it技術:dotnet:wpf開発 [2018/01/17 18:19] (現在) – [Shownイベント] yajuadmin | ||
---|---|---|---|
行 8: | 行 8: | ||
* [[https:// | * [[https:// | ||
* [[http:// | * [[http:// | ||
+ | |||
===== Windows Formsとの違い ===== | ===== Windows Formsとの違い ===== | ||
==== メリット ==== | ==== メリット ==== | ||
行 85: | 行 86: | ||
[[http:// | [[http:// | ||
- | UIスレッドで動作させために、Application.Current.Dispatcher.Invoke((Action)delegate内で画面表示処理を呼び出す。 | + | UIスレッドで動作させために、下記内で画面表示処理を呼び出す。 |
<code csharp> | <code csharp> | ||
+ | Application.Current.Dispatcher.Invoke((Action)delegate | ||
+ | </ | ||
+ | |||
+ | <code csharp sample> | ||
private void watcher_Changed(Object source, FileSystemEventArgs e) | private void watcher_Changed(Object source, FileSystemEventArgs e) | ||
{ | { | ||
行 101: | 行 106: | ||
</ | </ | ||
+ | ==== 画面表示時の例外エラー ==== | ||
+ | 例外エラー「' | ||
+ | |||
+ | フォームインスタンスを再利用するとでる。 | ||
+ | * 他のフォームを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:// | ||
行 110: | 行 217: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// |
it技術/dotnet/wpf開発.1510299302.txt.gz · 最終更新: 2017/11/10 16:35 by yajuadmin