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 とのバインドに変更します。 まずはプロジェクトに…
結果 Visual Studio起動からのCustomControl作成手順 マウスドラッグ移動できるTextBlock 移動できて文字表示できるEllipse● 一つのファイルに複数のカスタムコントロール テストアプリのコード 作成と動作環境 参照したところ 感想 関連記事 結果 カスタムコントロールの動作確認 Visual Studio起動からのCustomControl作成手順 プロジェクトを新規作成 WPFアプリケーションを選択 プロジェクト名を決定 今回は20241205_Customにした フレームワークの選択 今なら.NET8.0で問題ないはず いつもの画面 いつものデザイン画面…
とりあえず殴り書き、MSBuild プロジェクト形式から新しいProject Sdk形式にした場合、特定のXaml(Window)がデザイナーモードで表示されずにXmlエディターとして開いてしまう事がありました。結論としては .vs フォルダを削除したら直りました!
結果 方法 対象パネルにKeyboardNavigationMode.Cycleを指定する C#でのコードビハインド XAML KeyboardNavigationMode 列挙型 (System.Windows.Input) | Microsoft Learn 他のコントロールのKeyboardNavigationの既定値 Focusableの既定値がfalseのコントロール Focusableの既定値がtrueのコントロール 今回のテストアプリのコード MainWindow.xaml MainWindow.xaml.cs 参照したところ 録画に使っているアプリはScreenToGif 感想…
さくっとデスクトップアプリを作るのにBlazor Hybrid(Blazor + Windows Forms or WPF or MAUI)が思ったより良い感じだったので、雑メモを残しておきます。
もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと Windowsには、ハイコントラストモードというのがあるが、 WPFアプリで、その見た目の変化にアプリのUIを対応させたくなった。 で、対応する際に、 リソースディクショナリに定義したブラシを、 同じKeyで、 C#のコードから取得する ということをしたくなった。 そのやり方を調べる。 やったこと 下記のようにする。 ハイコントラストとそうでないときのResourceDictionaryを作成する それぞれに、同じKeyの<SolidColorBrush>をつくる そのBrushを、…
Get My IP v0.12.1.0 日本語言語ファイル IPv4 や IPv6 と外部IPアドレスを表示できるツール。 現在地を地図で表示することもできる。 - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - * 日本語化方法 ダウンロードした Strings.test.xaml をアプリのフォルダへコピー。 左メニュー Settings - Language Settings をクリック。 Enable language test…
概要 WindowsFormアプリで使用していた画像を扱うライブラリやアプリをWPF版に移植する際、発生する問題や気を付けるべきポイントの覚え書き WPFではMVVMとEFCoreを使ってテキストデータを扱うコードしか書いてこなかったので、これから覚えていきたいです。 BitmapとBitmapImage WinformではSystem.Drawing.Bitmapであるが、WPFはSystem.Windows.Media.Imaging.BitmapImageを使う 違いについてCopilotさんによると System.Windows.Media.Imaging.BitmapImageとSy…
もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、アプリ起動時にResourceDictionaryを切り替えるということをした。 qiita.com 今回は、アプリがすでに起動してウインドウが出ている最中に、ResourceDictionaryを切り替えて、見た目を変更するということをしたい。 やり方 やること自体は↑の以前の記事と一緒なのだが、それをウインドウの中から呼んでやる。 つまり、↑の記事のコードで行っていた、Appクラスで行った下記の処理を、ウインドウの中で行ってやる。 サンプルコード App.xaml.…
もくじ https://tera1707.com/entry/2022/02/06/144447#winui3 やりたいこと <NavigationView>の中に<Frame>を配置してPageを表示させて、 NavigationViewのNavigationViewItem(メニューの部分)を押したときに画面を遷移させる ということは、以前の記事でためした。 tera1707.com ※メニューの部分とは、下記の部分。 ただ私の場合、NavigationViewのメニューの部分を押してページを遷移させることよりも、 それぞれのページの中のボタンを押したとき等に、お互いのページを行き来させた…
.NET Conf 2024 のどのセッションを観るかを考えるためのセッションリストのメモです。 元のセッションリストはこちらです。 www.dotnetconf.net あまりにもセッションが多いので英語だと目が滑るので、概要を日本語にしました。 どうも日ごとに巨大なライブ配信のようなので、日ごとの想定開始位置も算出しました。 リストが巨大すぎるので、目についたワードをタグとして抽出してみました。 日 時刻 累計 時間 タイトル 概要 タグ 11月13日 01:00 00:00 60 分 Keynote - Welcome to .NET 9 .NET 9が登場し、クラウドネイティブおよびイ…
概要 今年春のBuildでWPFとWin UI 3の併用の方針がはっきりと打ち出されたためか、Win UI 3前提だった機能がWPFでも使えるようになってきています。(最新の体験を実装したいならWinUI、既存資産を生かすならWPF、という使い分け方針が語られていました) その1つとして、Win11っぽいUIを作れるFluentテーマも使えるようになります。既存プロジェクトでの使い方や使うための条件について調べてみました。 最初に結論まとめ .NET 9以降が必須となるようです。(.NET 8では使えません) その条件さえ満たせば使い方はとても簡単で、次の1行をApp.xamlのResourc…
もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前書いた記事👇で、 tera1707.com あるクラスを定義しているアセンブリ(exeやdll)の情報をみたいなと思うときがあった。 やり方調べてみる。 やりかた typeofとAssemblyクラスを使う。 下記のmsdocsを参考に、コードを書いてみる。 learn.microsoft.com 実験コード using Microsoft.UI.Xaml; using System.Diagnostics; using System.Reflection; // https:/…
もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと パッケージアプリにはURI起動という方法で、アプリを起動できるらしい。 やり方調べてみる。 やったこと Package.appxmanifestファイルを開いて、<Extensions>に、<uap:Extension Category="windows.protocol">を追加する。 具体的には、下記のようにする。 <Applications> <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint=…
もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと ↓に上げた実験コードのように、Winui3のPageとFrameを使った画面遷移のコードで、 Assembly.LoadFile()で読み込んだdllのなかのクラスのインスタンスを、 frameでページを指定して画面遷移するためのcontentFrame.Navigate()の第二引数で渡して、 Page側の、そのPageに遷移してきたときの処理のOnNavigatedTo(NavigationEventArgs e)でそれを受けるときに、 e.Parameterをそのインスタンスの…
みなさまこんにちは、おさかなです。今回の記事では、ソフトウェアアーキテクチャのひとつであるMVVMモデルについて、その仕組みや考え方を、関連するMVCモデルも含めて紹介したいと思います。ソフトウェアアーキテクチャを意識することで、記述するコードが規則によって分けられることで格段に読みやすくなり、保守も容易になります。本記事では、これからソフトウェアアーキテクチャを学ぼうとしている方、興味がある方にとって理解の一助になれば幸いです。 ソフトウェアアーキテクチャとは MVCモデルとは? 注文データ(Model) 注文システム(View) 注文管理システム(Controller) MVVMモデルとは…