ユーザ用ツール

サイト用ツール


it技術:dotnet:wpf開発

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
it技術:dotnet:wpf開発 [2017/11/17 17:12] – [Buttonのクリックイベントを発生させる] yajuadminit技術:dotnet:wpf開発 [2018/01/17 18:19] (現在) – [Shownイベント] yajuadmin
行 86: 行 86:
 [[http://code.i-harness.com/ja/q/238d7a|wpf - 多くのUIコンポーネントがこれを必要とするため、呼び出しスレッドはSTAでなければなりません]] [[http://code.i-harness.com/ja/q/238d7a|wpf - 多くのUIコンポーネントがこれを必要とするため、呼び出しスレッドはSTAでなければなりません]]
  
-UIスレッドで動作させために、Application.Current.Dispatcher.Invoke((Action)delegate内で画面表示処理を呼び出す。+UIスレッドで動作させために、下記内で画面表示処理を呼び出す。
 <code csharp> <code csharp>
 +Application.Current.Dispatcher.Invoke((Action)delegate
 +</code>
 +
 +<code csharp sample>
 private void watcher_Changed(Object source, FileSystemEventArgs e) private void watcher_Changed(Object source, FileSystemEventArgs e)
 { {
行 102: 行 106:
 </code> </code>
  
 +==== 画面表示時の例外エラー ====
 +例外エラー「'Window が閉じた後で、Visibility の設定や、Show、ShowDialog、およびWindowInteropHelper.EnsureHandl の呼び出しを行うことはできません。」
 +
 +フォームインスタンスを再利用するとでる。
 +  * 他のフォームをnewする
 +  * ShowModalで開く
 +  * そのフォームを閉じる
 +  * new済みなので、再度ShowModalで開く
 +
 +対応方法
 +  * [[https://qiita.com/7of9/items/b6cc4c7a5d407b01ffc9|Visual Studio / WPF > Form > 閉じたウィンドウを再度ShowModal()したとき > Error:System.InvalidOperationException: 'Window が閉じた後で、Visibility の設定や、Show、ShowDialog、およびWindowInteropHelper.EnsureHandl の呼び出しを行うことはできません。 > 対処]]
 +  * [[https://stackoverflow.com/questions/3568233/wpf-cannot-reuse-window-after-it-has-been-closed|WPF: Cannot reuse window after it has been closed]]
 +
 +
 +<code csharp>
 +private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
 +{
 +    e.Cancel = true;
 +    this.Visibility = Visibility.Hidden;
 +}
 +</code>
 +
 +==== Shownイベント ====
 +WPFにはWindowが最初に表示されたときのShownイベントが無いので、代わりにContentRenderedイベントを利用する。\\
 +[[https://qiita.com/tricogimmick/items/79e85baa1e99eec840d8|WPF Windowが最初に表示されたときに処理を行いたい]]
 ==== 表示文字幅の取得 ==== ==== 表示文字幅の取得 ====
 画面に表示される文字の幅を取得する。\\ 画面に表示される文字の幅を取得する。\\
行 139: 行 168:
 </code> </code>
 [[http://d.hatena.ne.jp/tako222/20090827/1251379855|WPFでGUIアプリケーションを作成する際のメモ その3]] [[http://d.hatena.ne.jp/tako222/20090827/1251379855|WPFでGUIアプリケーションを作成する際のメモ その3]]
 +
 +==== Bindingのソースが更新されない ====
 +ViewModelにINotifyPropertyChangedインターフェイスを実装する必要がある。\\
 +  * [[http://blog.okazuki.jp/entry/2014/09/15/201110|WPF4.5入門 その55 「Binding その1」]]
 +  * [[http://blog.okazuki.jp/entry/20091214/1260803280|INotifyPropertyChangedのいけてる実装]]
 +  * [[http://var.blog.jp/archives/67585928.html|Binding Source が更新されない]]
 +
 +INotifyPropertyChangedを実装はイケてないので、ReactivePropertyを使用する。\\
 +NuGetから「ReactiveProperty 3.6.0」で入手する。
 +
 +  * [[https://qiita.com/ledsun/items/6f4ef754e5ae2507e531|INotifyPropertyChanged実装のありえない面倒くささと、ReactivePropertyの信じられない素晴らしさ]]
 +  * [[http://blog.okazuki.jp/entry/2015/12/05/221154|MVVMをリアクティブプログラミングで快適にReactivePropertyオーバービュー]]
 +
 +==== ListViewの選択背景色を変更する ====
 +=== XAMLでの変更方法 ===
 +[[https://stackoverflow.com/questions/4246795/change-selection-color-of-wpf-listviewitem|Change selection-color of WPF ListViewItem]]
 +
 +<code xml>
 +<ListView.ItemContainerStyle>
 +    <Style TargetType="{x:Type ListViewItem}">
 +        <Style.Triggers>
 +            <Trigger Property="IsMouseOver" Value="True">
 +                <Setter Property="Background" Value="midnightblue" />
 +            </Trigger>
 +        </Style.Triggers>
 +    </Style>
 +</ListView.ItemContainerStyle>
 +</code>
 +
 +=== コードによる変更方法 ===
 +[[https://www.codeproject.com/Articles/29699/WPF-How-to-create-Styles-in-code-and-magical-Conte|WPF: How to create Styles in code/and magical Content]]
 +
 +<code csharp>
 +// 選択時の背景色
 +Style styleListViewItem = new Style(typeof(ListViewItem));
 +Trigger triggerIsMouseOver = new Trigger { Property = ListViewItem.IsMouseOverProperty, Value = true };
 +triggerIsMouseOver.Setters.Add(new Setter(ListViewItem.BackgroundProperty, Brash.Gold)) SolidColorBrush(selectbackColor)));
 +styleListViewItem.Triggers.Add(triggerIsMouseOver);
 +lstRework.ItemContainerStyle = styleListViewItem;
 +</code>
 ==== メモ ==== ==== メモ ====
   * [[https://stackoverflow.com/questions/632519/how-can-i-hide-the-header-of-a-listview-wpf|How can I hide the header of a listview WPF?]]   * [[https://stackoverflow.com/questions/632519/how-can-i-hide-the-header-of-a-listview-wpf|How can I hide the header of a listview WPF?]]
行 149: 行 218:
   * [[http://hogetan.blog24.fc2.com/blog-entry-7.html|WPFでリサイズ可能な枠なしウィンドウを作成する]]   * [[http://hogetan.blog24.fc2.com/blog-entry-7.html|WPFでリサイズ可能な枠なしウィンドウを作成する]]
   * [[http://d.hatena.ne.jp/CoMo/20110421/1303394273|WPFのレイアウトのTips]]   * [[http://d.hatena.ne.jp/CoMo/20110421/1303394273|WPFのレイアウトのTips]]
 +  * [[http://sourcechord.hatenablog.com/entry/20131028/1382978042|アプリの多重起動を防止する]]
it技術/dotnet/wpf開発.1510906358.txt.gz · 最終更新: 2017/11/17 17:12 by yajuadmin