eXtensible Application Markup Language Microsoftが開発した、次世代アプリケーション向けマークアップ言語である。 Windows Presentation Foundation(WPF, 開発コードネームAvalon)によるアプリケーション、コンテンツ開発等において使用される。
概要 WPFでPanelがいくつも並ぶ画面を作った場合に、Panel単位でタブオーダーを並べ替えたいという状況はよくあると思います。とはいえ、全てのコントロールにタブオーダー指定をするのは避けたい。WPFではそれを実現できるタブオーダー指定の方法があり、上手く使うととても便利なので、それを紹介します。 最初に結論まとめ Panel(などの親要素)に対してKeyboardNavigation.TabIndexでタブオーダーを指定した上で、さらにKeyboardNavigation.TabNavigation="Local"を指定して子要素のタブオーダーを独立させます。 こうすることで、子要素には…
Windowsアプリでラベル印刷のアプリを作りたいが、レイアウト作成が面倒。と、億劫になっていたところ、XAMLで簡単に印刷レイアウトを作成し印刷できるみたいので簡潔にまとめてみました。 WPFライブラリ を使用していますが WPFアプリ のみならず、Windows Forms でも使用可能です。 印刷サイズの変更は可能なので、A4で帳票作成なども出来ます。設定方法も記載しますので、適宜変更してください。 ユーザーコントロールライブラリの作成 1、WPFアプリ もしくは Windowsフォームアプリ を作成 2、ユーザーコントロールライブラリを作成[ソリューション で右クリック]→[追加]→[…
今更ながら趣味で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 とのバインドに変更します。 まずはプロジェクトに…