eXtensible Application Markup Language Microsoftが開発した、次世代アプリケーション向けマークアップ言語である。 Windows Presentation Foundation(WPF, 開発コードネームAvalon)によるアプリケーション、コンテンツ開発等において使用される。
今更ながら趣味でWPF(Windows Presentation Foundation)を始めました. その過程でXAML(Extensible Application Markup Language)を書き始めたのですが、かなり独特な言語だったのでその備忘録第一弾です. 開発言語はC#を想定します. XAMLとWPFの関係 XAMLを調べる前はXAML=WPFだと思っていたのですが、どうやらそうではないようです. XAMLはあくまでUI(のプロパティや他のUIとの関係)をXMLチックに書ける言語であり、XAMLを利用できる技術(環境)は以下のようなものがあります. 名称 特徴 WPF .NE…
かつてこんな記事を書きました。 bignight.hatenablog.com それには例外がありました。 ContentControl経由でViewを呼び出すとViewModelを共有してくれない😱 さあどうする?というわけで実験してみました。 (ちなみにContentControl経由で子コントロールを呼ぶ方法は以下の記事を参考にしてください。今回はDataTemplate経由で子コントロールを呼びます。) bignight.hatenablog.com簡単なコードです Viewはこんな感じ <Window x:Class="WpfApp1.Window1" xmlns="http://s…
ご無沙汰しております。ここは本来技術ネタを書く場所だったんですが、方向がずれてきてまた技術に返り咲こうかなと。 昔の記事を見てると色々やってるもんですね。ボタンを動的に配置したい、トリガーでStyleを変更したい、アニメーション云々。 久しぶりにWPFに戻ってまいりました。 昔に比べてDataTemplateの記載は増えた気がする。現場では当たり前のように使われるDataTemplate。動的配置だいだいだいすき。 でも気になることがあるんですよね。DataTemplateの記事を見てるとItemsControl(ListBoxでもいいが)の記載ばかり目に入る。 そうじゃないんだ、DataTe…
はじめに WPFでダイアログ表示を行う方法を備忘録として残したいと思います。 前提 今回の記事はPrismを用いていることが前提となります。 ユーザーコントロール画面を新規作成 まずはポップアップで表示するユーザーコントロール画面を新規に追加します。 プロジェクトを右クリック > 追加 > ユーザーコントロールをクリックします。 Viewsフォルダに新規のページが出来ていることを確認した後、実際の画面を作成していきます。 今回は以下のようなXAMLを書いてみました。 <UserControl x:Class="ExtendSettingsView.Views.HelpPage" xmlns="…
WPFでUIの表示切替のモードを選択するコンボボックスを作成するときに、コンボボックスの値をenumで定義できれば、内部処理の条件判定などがいい感じになるのでは?と思ったので色々と調べてみたところ、PrismのコミッターであるBrian Lagunasさんの解説動画がYoutubeにありました。 マークアップ拡張について、何となくの理解でいると応用が利かなそうなので、細かいところを勉強用にメモを残します。 Brian Lagunasさんの解説動画 詳しい解説やソースコードはBrian Lagunasさんの動画を参照してください。 enumとコンボボックスのバインドについて解説されています。 h…
前回より MAUI の Shell に触れ始めました。.NET MAUI のShell は、基本的に Xamarin.Forms のShell と機能が同じようで、モバイルアプリケーションの基本機能であるナビゲーション・・・平たく言えば、モバイルアプリの画面(ページ)遷移や検索等の機能を統合的に管理し、かつ操作を標準化する機能なようです。今回は複数のページを Shell でどのように遷移するのか、試してみたいと思います。 画面遷移の挙動確認用として、ContentPage をプロジェクトに三つ追加してみます。新規の MAUI プロジェクトを作成し、ソリューションエクスプローラでプロジェクトを選…
昨日の記事では、.NET MAUI で MVVM の実装を試みました。しかし現在様々なベンダーから MVVM デザインパターンをサポートするフレームワークが提供されており、これらを使えば容易にMVVM での開発を行なえます。今回は、CommunityToolkit を使って、.NET MAUI のサンプルを MVVM 化したいと思います。 docs.microsoft.com CommunityToolkit はプラットフォームやランタイムに依存せず、高パフォーマンスを期待できるフレームワークです。Visual Studio で .NET MAUI のプロジェクトを新規作成後、ソリューションエ…
先週に引き続き、.NET MAUI の記事です。 今回は ,NET MAUI 新規プロジェクト作成時のイベント処理を ViewModel を設け、MVVM のデータバインディングによる更新へ変更します。 新規プロジェクト作成時、ビューのカウンター処理は、ボタンクリックイベント内で SemanticScreenReader.Announce メソッドで更新されています。 ボタンクリックイベントの実装 SemanticScreenReader.Announce に関する詳細はこちら。 docs.microsoft.com これを ViewModel とのバインドに変更します。 まずはプロジェクトに…
前回に引き続き、.NET MAUI の記事です。 当方、Android・Mac は初心者なので、その辺を考慮して記事を読んで頂けば幸いです。 今回は iOS を選択して、Mac でサンプルを実行します。 まず下準備として、Mac に Visual Studio 2022 for Mac Preview をダウンロード・インストールします。 Visual Studio の MAUI プロジェクトのデバッグ実行をドロップダウンで「iOS Remote Device」に変更して、デバッグ開始します。 「リモートデバイス」をクリックすると、最初にガイダンスが表示されます。以下のアナウンスに従って、Ma…
またまた昨日に引き続き、.NET MAUI の記事です。 昨日、MAUI のサンプルプロジェクトを Android Emulator で実行してみましたが、正直あまりに遅すぎて使い物になりませんでした。そこでいろいろ調べたところ、@amay077さんの記事が見つかりました。 qiita.com Android Studio をインストールして設定する方法、良さ気です。この方法に従ってHyper-V を無効化して試してみたところ、比較的速く起動しました。その後、再度Hyper-Vを有効化して実行すると、あれサクッと起動した??ただしエミュレーターへのプログラムのロードから実までエラく時間かかりま…
おはようございます。 今日はタイトルの通り、「体系的なWPF学習記事」のネタを考えます。 前提 他サイトで紹介されているWPF記事を剽窃(ひょうせつ)しない これは当然ですね。剽窃したらアカン。 というか他の人の解釈を鵜呑みにせず、自分自身が十分WPFについて理解しているつもりなので(自信過剰かもしれません)自分で言葉を紡ぐ方が効率よく説明できるのではと思います。 可能な限り図説する(特にクラス階層) これはもしこのブログのWPF学習記事を薄い本化するときに予め図示しておいた方がコンテンツの水増しができるのでは?と思ったからです。 まあ、WPFは水増ししなくても十分なコンテンツ量になると思いま…
ランキング参加中プログラミング RelayCommands どのように機能するか (How it works) ICommand の働き (Working with ICommand) Sample AsyncCommands どのように機能するか (How it works) 非同期コマンドの働き (Working with asynchronous commands) Sample 参考 RelayCommands RelayCommand と RelayCommand<T> は ICommand の実装で、メソッドやデリゲートを view に公開することができます。これらの型は view…
概要 WiXSharpというインストーラ作成用のライブラリの話です。以前の記事でも少し触れましたが、なかなか癖が強く、すぐにやれそうなことも意外と工夫が必要だったりします。 その中で、「NuGetでライブラリを追加したい」という、よく必要になる上に簡単にやれそうな作業で意外と工夫が必要だったので、今回はそのやり方を書きます。 最初に結論まとめ ビルド先に出力されたdllの相対パスを、msi定義部分のDefaultRefAssembliesに手動で追記すればOKです ちょっと工夫すると、自動でも追記できます デフォルトのビルド先だとソリューション構成ごとにパスが変わってしまうので、ビルド後イベン…
概要 Windowsインストーラを作ろうとした場合に、WiX Toolsetという有力な選択肢があります。そのWiX Toolsetをさらに作りやすくするWiXSharpというライブラリがあります。 しかしこのWiXSharpはなかなか癖が強く、前提条件がピタリはまると大きな力を発揮しますが、外れているとかえって苦労を呼ぶ場合があります。そのメリット・デメリットや、どういう人に向いているかというところを私の考えでまとめます。 最初に結論まとめ 説明 ※WiX ToolsetをWiX、Windowsインストーラをmsiと略記します msiを本気で作ろうとすると、やはり最初に選択肢に挙がるのはIn…
ランキング参加中プログラミング RelayCommand 属性 How it works(どのように機能するのか) Command パラメーター 非同期コマンド (Asynchronous commands) コマンドの有効化と無効化 (Enabling and disabling commands) コマンドの同時実行の処理 (Handling concurrent executions) 非同期処理の例外のハンドリング (Handling asynchronous exceptions) 非同期処理のキャンセル (Cancel commands for asynchronous opera…
Webのフロントエンドのコンポーネントに相当するWinUI3のパーツはCustom ControlかUser Controlである。 Custom Controlはより低レベルの概念であり、独自の動作と描画ロジックを持てる。 対してUser Controlは既存のコントロール(UIパーツ)の組み合わせであり、フロントエンド用語のコンポーネントにより近いと思われる。 まずはUser Controlとして実装することを考え、User Controlで実現不可能な場合だけCustom Controlとして実装することを検討すると良い。 この記事では以降User Controlにだけ言及する。 また、…
意外と単体のサンプルコードが無い。 やりたいことからの逆引きとして残しておく。 基本的な方針 x:NameでTextBoxのインスタンスにアクセスできるようにして、Textプロパティを読み取れるようにする。 TextChangedイベントハンドラを登録して処理する。 TextBox.TextChanged イベント (Windows.UI.Xaml.Controls) - Windows UWP applications | Microsoft Learn 実装例 Foo.xaml <!-- 途中略 --> <TextBox x:Name="InputTextBox" TextChanged=…
概要 WPFの画面にWebView2を実装。デバッグ実行すると問題ないが、実行環境にインストールすると表示されない・・・? そういう場合、WebView2はexeがあるフォルダへの書き込み権限を要求するという特徴のせいかもしれません。その説明と解決策です。 最初に結論まとめ WebView2のインスタンスに、下記※1のように設定して、確実に書き込み権限があるフォルダを使わせるようにしましょう。 処理に時間がかかること、処理が終わるまでWebView2を使用できない(Sourceを与えたりしてはいけない)という点に注意です。 ※1 //xaml側でName="webView"と定義している前提で…
Xamarin.FormsアプリをMAUIへ移行する際にプロジェクトファイル(csproj)を直接編集して設定変更することが度々ありました。 今回はその中で利用機会のありそう3点をご紹介します。 プラットフォーム固有のソースファイル指定 (MAUI向け) XamlC強制 HttpHandler設定 プラットフォーム固有のソースファイル指定 1つのプロジェクトで複数プラットフォーム向けのアプリをビルドする場合におすすめの設定です。 MAUIで特に有効ですが、SDKスタイルのプロジェクト全般で利用できるためマルチプラットフォーム向けライブラリを作る際にも役立ちます。 csprojファイルを編集して…
.NET MAUI (.NET Multi-platform App UI)は .NET 技術をベースとしてネイティブアプリを開発するためのクロスプラットフォームフレームワークです。本記事では .NET MAUI におけるカスタムコントロールの作り方を紹介します。
.NET MAUI とは .NET MAUI とは - .NET MAUI | Microsoft Learn.NET マルチプラットフォーム アプリ UI のドキュメント .NET マルチプラットフォーム アプリ UI のドキュメント - .NET MAUI | Microsoft Learnコントロール コントロール - .NET MAUI | Microsoft Learnレイアウト レイアウト - .NET MAUI | Microsoft LearnContentPage(NavigationPage) ContentPage - .NET MAUI | Microsoft Lear…
もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと PowerShellのコマンドで、Get-AppxPackage アプリ名というのをよく使う。 そのコマンドを打つと、PCにインストールされているstoreアプリの情報一覧が取れるのだが、その中の特定の項目の値だけを取りだしたい。 やりかた Get-AppxPackage とだけ打つと、 Name : Microsoft.NET.CoreFramework.Debug.2.2 Publisher : CN=Microsoft Corporation, O=Microsoft Corp…
かわいい妻と息子と娘を持つ父ちゃんやってます。 最近プログラミングを子育てしながらもっと楽しもうという意欲が湧いています。 きっかけは牛尾剛さんの世界一流エンジニアの思考法を読んだことでした。著書の中で少し調べて解決できるレベルの知識を即興で解決できるレベルに落としこむとパフォーマンスが上がる旨の記述がありました。なのでGoogle検索でわかるレベルのコードや基礎だけど深く知ろうとしなかった知識をはてなブログを使ってまとめ直すことで理解を深めようと考えています。 私は普段WPFを利用してコーディングしています。GUIをXAML、ロジックをC#で記述しています。システムモデルはMVVMを採用して…
MacからWindowsに乗り換えたWindows初心者。 乗り換えたきっかけや使い始めの所感、購入したPCや周辺機器まで書けたので、今回は初期設定とインストールしたアプリなどを備忘録として書いておく。
本日もお疲れさまでした。 私この前の土曜に登山に行ったのですが、運動不足の自分が筋肉痛から逃れられるはずもなく、治るまで3日かかりました。 老いは怖いですね。 最近、WPFでテキストエディタっぽいものを作ってみようと思ったんですが、WPFってなんぞ?MVVM、、、???みたいな感じだったので、ドキュメント一通りなめようとしたんですが、いかんせん手を動かさないと気が済まない性分なのでテキストで学習している最中です。(なぜか持っていた『C#テスト駆動開発』を使用) xamlでUIを作っていくのはやりやすくていいですね。今後もぼちぼち学習していきますわ。 思いついたその勢いで始めたこの日記も3日坊主…