目次
■画面作成(WPF/xaml)
スタイル/Template(Style/Template)
考え方と基本的な使い方
実際に使ってみる
styleでアニメーションを動かす(Storyboard)
- [C#/WPF] Storyboardの動かし方(Startのさせ方) あれこれ
- Storyboardでアニメーションをつくる
- Storyboardでアニメーションをつくる2(TargetPropertyの階層的な指定)
- xaml+C#で当番決めのためのルーレットを作る(アニメのstart/stopをコードからやる)
style/Templateの便利な使い方
- Templateで見た目を変えつつStyleとTriggerでMouseOver等のときの色を変える
- BasedOnを使って元のstyleを受け継ぐ
- EventTriggerを使って、Buttonでなくてもクリック時のCommandをかけるようにする
- DataTriggerを使って、ViewModelのフラグ等にバインドして、見た目を変化させる
- ControlTemplateの中にViewModelのプロパティをバインドする
リソースディクショナリ(ResourceDictionary)
ユーザーコントロール(UserControl)
- 簡単なユーザーコントロール(WPF)の作り方
- ユーザーコントロールのひな型
- 自作ユーザーコントロールにバインディングするプロパティのMode(OneWay/OneWayToSource/TwoWay)によって、値変化時の動作がどう変わるか実験
- ユーザーコントロールのプロパティの値の妥当性検証と値の矯正のやり方(と、躓いた箇所とその回避策)
oxyplot
ルーティングイベント関連
- Buttonをマウスクリック/タッチしたときのイベントの流れ(親子関係なし)
- Buttonをマウスクリック/タッチしたときのイベントの流れ(親子関係あり)
- Gridをマウスクリック/タッチしたときのイベントの流れ(親子関係あり)
- コントロールをマウスクリック/タッチしたときのイベントの流れを今一度確認②
- 重ねたGridの上を押しながら移動(マウスでドラッグ、タッチでスライド)したときのイベントの流れ(IsManipulationEnabledをON/OFF切り替えて実験)
- Windowクラスのイベント全部、発生時にログ取ってみる
- ルーティングイベント関連参考サイト集
Prism関連
- Prism(6.3.0)のRegionで画面遷移をする
- prism.unity(6.3.0)を試したまとめ(RegisterTypeとRegisterInstanceの違いなど)
- prism.unity(6.3.0)の簡単な実装サンプル②(登録~依存性注入まで)(RegisterType使用)
- prism.unity(6.3.0)の簡単な実装サンプル①(登録~依存性注入まで)(RegisterInstance使用)
- Prism(6.3.0)のKeepAliveをfalseにすることとIsNavigationTargetでfalseを返すことの違いの実験
ListView
- ListViewのGrid表示を使う
- ListViewをグループ表示する(xamlで書く)
- ListViewをグループ表示/ソート表示する(C#コードで書く)
- ListViewの行の背景色を、データの中身によって変える
- ListViewのGrid表示のセルの中身をカスタムする
- ListViewのヘッダの中身をカスタムしたい
- ListViewの見た目(背景色とか、マウスオーバー時の色とか)をまるっと変えたい
WinUI3
画面作成
- UWP用のデザインツール Fluent XAML Theme Editor を使ってWinUI3アプリのテーマ色を設定する
- NavigationViewを使う
- NavigationViewを使う2(画面遷移時にPageのインスタンスを使いまわす)
- 左クリックでFlyoutを表示できるToggleボタンを作る
- 左クリックでFlyoutを表示できるToggleボタンを作る その2
- WinUI3で最小ウインドウサイズを指定する
- WinUI3のウインドウの最大化ボタン無効化や、ウインドウサイズ変更をしたい
- WinUI3のウインドウのタイトルバーを自由にカスタムしたい
- WinUI3アプリのウインドウのタイトルバーを消す
- WinUI3アプリのウインドウの大きさや位置が変化したイベントと、変化したときの大きさや位置の値を取りたい
- WinUI3アプリのウインドウを、dpiの大きなモニタに移動すると、中のUI部品は大きくなるのに、ウインドウの大きさはそのままになる
- WinUI3アプリを高DPI(>100%)でappWindow.MoveAndResize()する
- WinUI3アプリから、別のDLLに置いてあるResourceDictionaryを使う
- WinUI3でウインドウプロシージャをフックする(最大/最小ウインドウサイズの指定にも使える)
- ワーカースレッドのコードに、UI部品を更新するコードを書く
- コードからバインディングを設定する
- 同じスレッドの別ウインドウを開く
- WinUI3の背景アクリルの色調整をする
- テキスト中に出てくるリンクをつくりたい1(没)
- テキスト中に出てくるリンクをつくりたい2
- WinUI3で表を使うために、CommunityToolkit.WinUI.UI.Controls の DataGridを試す
画面作成(色のカスタマイズ(マウスオーバー時、押下時、無効時の色 / テーマごとの色))
- WinUI3のコントロールの標準style(generic.xaml)のありか
- コントロールのマウスオーバー時等の色を変えたい
- WinUI3ではStyle.Triggersがないので代替手段でマウスオーバー時の背景色変更する
- WinUI3でテーマカラー(ダーク/ライト/ハイコントラスト)対応する-マウスオーバー時の色変更も込み
- アプリ自身で自分のテーマ(ダーク/ライト)を変更する
- ResourceDictionaryから他のResourceDictionaryのリソースを使うとき
- generic.xamlにないデフォルトテンプレートのありか(RadioMenuFlyoutItemの場合)
- ライト/ダーク/ハイコントラストの変化時イベントはWinUI3で取れるか?
一般
- WinUI3プロジェクトをビルドしたexeを直叩きで起動する
- VS2022でWinUI3アプリを実装中に、すべてのNugetキャッシュをクリアをすると、ビルド時にエラーが出だした
- WinUI3でSelfContained=trueでビルドすると出るエラー対処
- WinUI3でSelfContained=trueでビルドすると出るエラー対処 その2
- WinUI3でSelfContained=trueでビルドすると出るエラー対処 その3
- インストールしたパッケージの中のexeがスタートアップで起動するようにする
- インストールしたパッケージの中のexeをAliasでほかのプログラムから呼べるようにする
- WinUI3アプリをローカライズする(Resource.resw使用)
- WinUI3アプリをローカライズする(ResourceDictionary使用)
- WinUI3アプリでResource.reswに登録したリソースをC#コードから使う
- 現在の言語の設定にかかわらず、指定した言語のリソースを取ってくる
- ResourceDictionaryの中のリソースを、コードから使いたい
- パッケージしたアプリの「ローカルフォルダ」にアプリの設定データを保存する
- 非パッケージのWinUI3アプリを、WindowsAppSDKが入っていないPCでも動くようにする
- いったんWindows App SDKをアンインストールしたい
- WinUI3のコントロールのnupkgを作って使ったときに出てくる「.xbfがない」エラーの対応
MAUI(.NET Multi-Platform App UI)
ReactiveProperty
WPF/xaml一般
- ディスプレイのON/OFFを取得する
- ウインドウメッセージハンドラをフックする
- WPFでアクションセンター内のトーストを押したときにアプリを起動する
- コンバーター(Converter)の書き方
- ノートPCのバッテリーの充電状況を取得する
- もうとにかく今すぐデバッグのためのログを出力したいときのクラス/メソッド
- NLogでログをとる
- 自分以外のウインドウを最前面にもってくる
- ユーザーがログイン/ログアウト、PCをシャットダウン等したときになにかしたい
- プライマリディスプレイ(1番の画面)の全体の大きさ/作業領域の大きさを取得する
- プライマリディスプレイのサイズの取り方いろいろ(SystemParameters/Screen)
- 上にかぶせたTextBlockを通り抜けて下のボタンがClickイベントを取れるようにする(IsHitTestVisible)
- Pathで描いた図形サンプル集(ひし形、角を丸くした四角、楕円など)
- 【うまく動かせず断念】.NET core 3.0のWPFでUWPコントロールを使う
- Segoe MDL2 FontFamilyを使って、いいね!っぽいボタンをつくる
- ビューモデルからビューのメソッドを呼ぶ代わりに、EventTriggerでMouseDown等のイベントを拾ってビューのメソッドを呼ぶ
- ビューモデルからビューのメソッドを呼ぶ
- Setting.settingを使用して、簡易的にアプリの設定値を保存/読出しする
- Propertiesでxamlの画面を多言語対応(ローカライズ)する&現在の言語と地域のコードを取得する
- ResourceDictionaryでxamlの画面を多言語対応(ローカライズ)する
- UIの現在の表示言語設定をコードから変更する
- xamlで定数を使う
- コントロールの大きさや位置を、C#コードから変化させる(RenderTransform)
- 画面の要素を回転/拡大縮小/移動する(RenderTransform)
- 画面の要素を回転/拡大縮小/移動する(RenderTransformにMatrixTransform)
- フリックやピンチインアウトでControlを移動・拡大縮小する(ManipulationDeltaイベントとMatrixTransform)
- マルチバインディングで複数プロパティを繋げて、一つのTextBlockに表示する
- スライダのツマミをスライドしたときに設定できる値をとびとびの値(0,50,100,150,・・・等)にしたい
- wpfで、×ボタンをなくしたウインドウを作る(WindowChrome)
- ListBoxのアイテムに、バインドしたコレクションのインデックスを出す
- ItemsControlで、複数のControlを重ねて表示する
- RelativeSource(バインディング)の使い方メモ
- ボタン押したときに時間がかかる処理をawaitでやるときに、ボタン連打を防止したい
- ボタン押したときに時間がかかる処理をawaitでやるときに、ボタン連打を防止したい その2
- System.Windows.Pointのリストを使って線を引く
- Grid.Clipで表示領域を制限する(好きな形に切り抜く)
- Binding復習①
{Binding Path=.}
でDataContextそのものにバインドする - Binding復習② リストで今選択している項目を
{Binding Path=/}
で取得する - あるView/ViewModelから、別のView/ViewModelのメソッドを呼びたいとき
- WPF画面とやり取りするための最低限の構成
- WPF画面とやり取りするための最低限の構成(.NET6版)
- .net5でSystem.Windows.Formsを使いたい
- クラスライブラリのプロジェクトにWPFのウインドウを追加する
■UWP/パッケージング
■VisualStudio
.NET5/6
一般
- VisualStudio2019で2017と同じ静的解析(コード分析)をしたい
- ビルドをバッチで行う
- bitsadminでnuget.exeをダウンロードする
- 「リンクとして追加」で、プロジェクト間で同じソースファイルを使う
- ソース上のコメントを英語で統一したいのに自動生成されるcsファイルが勝手に日本語コメントになるので英語に直す
- Debug/Releaseビルドで、参照するdllを変えたい
- 参照の追加について(出力フォルダに自動でコピーされるもの/されないもの)
- System.Windows.Interactivity は Microsoft.Xaml.Behaviors.Wpf に置き換え必要
- ソリューションの中にnugetしたライブラリを入れるpackageフォルダが作られる/作られない、の設定
- 自作例外発生時に、VisualStudioの例外設定を使って止めてもらう
ダンプの採取とそのデバッグ
- ProcDumpを使ったダンプファイルの作成と解析
- ProcDumpを使ったダンプファイルの作成と解析、に関する実験
- WER(WindowsErrorReporting)を使ったダンプ採取と解析
- .pdbファイルについてのメモ
- miniダンプとfullダンプの違い
■C#(.net)
json
- .NET標準のDataContractJsonSerializerクラスを使ってjsonを読み書きする
- DataContractJsonSerializerで読み書きするjsonデータのためのクラスを簡単につくる
- ジェネリクスでいろいろなjsonファイルの読み書きできるようにする
- jsonデータを保存するクラスをrecordで作る
WMI
- WMIで何かの値を取りたいときの、どこからとればいいかの調べ方
- WMIで、あるプロセスのCPU時間やメモリ使用量をとる
- WMIで、全プロセスのCPU時間やメモリ使用量をとる
- WMIで、WindowsPCにインストールされたドライバーのバージョンを取得する
一般
- Bluetooth v4(BLE)機器と通信する(BLE基礎メモ)
- Bluetooth v4(BLE)機器と通信する(C#で実装メモ)
- WPFでBluetooth v4(BLE)機器とペアリングする
- データをAESで暗号化してファイルに保存する
- 正規表現で、ルールに一致した文字列かどうか調べる/一致した文字列を抜き出す
- StopWatchで処理にかかる時間を測る
- ファイルに文字列/バイナリデータを読み書きする
- UWPアプリでファイルを作成~テキストを読み書き~画像を読み込み
- WriteableBitmapで点を打って、テレビの放送終了後の砂嵐をつくる(Taskで処理)
- WriteableBitmapで点を打って、テレビの放送終了後の砂嵐をつくる(タイマーで処理)
- WriteableBitmapで点を打って、テレビの放送終了後の砂嵐をつくる(UWP版)
- Disposeとは?
- デストラクタとDisposeについて
- yield returnで、遅延評価されるコレクションを作る
- 拡張メソッドの作り方
- C#で作成したDLLをC#で呼ぶ(静的/動的)
- C#でjpgのExif情報を書き込む
- C#でjpgのExif情報を読み込む
- BitmapSource派生クラスの使い方
- BitmapSourceやその派生クラスから、System.Drawing.Bitmapに変換する(BmpBitmapEncoderクラス)
- System.Drawing.BitmapをBitmapSourceに変換する
- 画像に対していろいろ行う(System.Drawing.Bitmap版)
- 画像に対していろいろ行う(System.Windows.Imaging版)
- GeoTag(GPS情報)をjpgファイルに設定/取得する
- GeoTag(GPS情報)をjpgファイルに設定/取得するときのハマったメモ
- 特殊なフォルダパスを取得する
- Linqの中でawaitさせたいとき
- プロパティを文字列で指定して値をsetし、forループ中で使用する
- 動かすアプリのプロセスがx64かx86かによって、SpecialFolderのパスが変わる
- 文字列の中のyyyyMMdd(20201016等)とtimezone(+0900等)を取り出してDateTimeに変換する
- Mutexでリソースの排他制御をする
- レジストリに好きな値を書き込む
- C#のxmlコメントからヘルプファイル(.chm)を作成する
- 現在の言語と地域のコードをC#でとってくる(ja-JP等)
名前付きパイプでプロセス間の双方向通信を行う- 名前付きパイプでプロセス間の双方向通信を行う(改良版)
- event/delegateを使って、他のclassに、自分のメソッドに欲しい値を載せて良いタイミングで実行してもらう
- 2つのIDisposableをusingしたときのコード分析の指摘CA2202の対応
- パフォーマンスモニタ(perfmon)で見るような情報をプログラムで取得する
- 使用中のGDIオブジェクトの数を見る
- WPFで、UWPのAPIを使ってプロセス毎のCPU時間とメモリ使用量をとる
- UWPアプリの一覧とアプリの概要を表示する
- UWPアプリの一覧とアプリの詳細を表示する
- UWPアプリをsuspendしたりresumeしたりする
- バックグラウンドプロセスを作ってみる
- バックグラウンドプロセスを作ってみる(.NET5版)
- バックグラウンドプロセスを作ってみる(.NET5版 別解)
- タスクトレイに常駐するバックグラウンドアプリをつくる
- パスが、ローカルPCのパスか、サーバー上のパスか判定する
- 参照型を値渡ししたときの不思議な動作を調べる
- C#のスクリプトでアプリのバージョン番号を一括更新
- ファイルに、フルアクセス権限を付与する
- 出力フォルダの中に「net5.0-windows」フォルダができないようにする
- switch式の書き方 チートシート
- 可変長のメソッドを作る
- 文字列や数値からEnumに変換する
- Consoleアプリなどのexeの中のメソッドを呼ぶ
- .NET6アプリからUWPのAPI(WinRT API)を使う
- よく知られたフォルダパスの取り方
- ManualResetEvent / AutoResetEvent で処理を待たせる
- ファイルやリンクをダブルクリックしたときと同じ動きをC#でさせる
- COMのC++コードをC#に直す
- 1つのexeから、同じnugetパッケージの複数バージョンを切り替えて使いたい
- アプリの空き時間にキー入力を監視する
- ウインドウ非表示中にキー入力を検知(グローバルホットキー)
- 指定フォルダの中にある.特定の拡張子のファイルをリストUPする
- XElementを使ってxmlファイルを読み込む