CommunityToolkit.Mvvmで最低限の環境を整えるためのまとめ

はじめに この記事は、初心者向けではありません。 WPFにおける、CommunityToolkit.Mvvmを使って「最低限の」環境を作るための、私的なメモにすぎません。 ここでのプロジェクト名は Memoir とします。プロジェクトはWPFの最新.NET(記述時点では10.0)にします。 プロジェクト作成 NuGetでインストールする必要があるパッケージ CommunityToolkit.Mvvm Microsoft.Extensions.DependencyInjection まずは Views,ViewModels,Models,Helpers フォルダを作り、MainWindow.xaml を Views に移動する。 そして App.xaml を以下のようにする(StartupUriにViewsを追加する)。 <Application x:Class="Memoir.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Memoir" StartupUri="Views/MainWindow.xaml"> <Application.Resources> </Application.Resources> </Application> 4K対応 このコードを通すためには、unsafe の許可を通さなければならない。 プロジェクトで「ビルド」-「アンセーフ コード」のチェックボックスにチェックを付けること。 Helpers ディレクトリに以下のファイル DpiHelper.cs を作成する。 namespace Memoir.Helpers; public static partial class DpiHelper { /// <summary> /// DpiAwarenessを設定する /// </summary> public static void EnablePerMonitorDpiAwareness() { // アプリケーションをDPI Awareに設定 if (Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 3) { // 新しい SetProcessDpiAwareness SetProcessDpiAwareness(ProcessDpiAwareness.ProcessPerMonitorDpiAware); } else { // Windows 8.1以前の場合は、SetProcessDpiAwareを使用する(非推奨) SetProcessDPIAware(); } } /// <summary> /// 新しい DPI Aware で使う引数 /// </summary> private enum ProcessDpiAwareness { ProcessDpiUnaware = 0, ProcessSystemDpiAware = 1, ProcessPerMonitorDpiAware = 2 } /// <summary> /// 古い DPI Aware /// </summary> /// <returns></returns> [LibraryImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static partial bool SetProcessDPIAware(); /// <summary> /// 新しいDPI Aware /// </summary> /// <param name="awareness"></param> /// <returns></returns> [LibraryImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static partial bool SetProcessDpiAwareness(ProcessDpiAwareness awareness); } DIの設定 App.xaml.cs への改変 ...

2026年03月30日 · 2 分 · ☨もりゃき.xyz☨

x:Static不使用:CommunityToolkit.MvvmでDIを利用した、実務的なWPFでの国際化対応(多言語対応)

DIを使いながら、国際化対応(多言語対応)をしよう 今やグローバル時代!世界を相手にしなければ勝てない! そう、東京弁だけでなく大阪弁、名古屋弁、博多弁など…ごめんなさい調子に乗りました、単純に「日本語」「英語」「ロシア語」対応について語ります。(天丼) 今回は総集編として カップ麺シリーズ:一から学べる、WPFでの多言語対応方法 を、DI込みの記事として公開します。 本記事では、WPFでCommunityToolkit.Mvvm+DI構成を取りつつ、アプリを実務的に多言語対応させる方法を解説します。 「x:Staticを使わずに切り替えたい」「コードビハインドを汚したくない」 そんな悩みに答えるべく、依存性注入によるResourceManager活用+ViewModel連携まで、丁寧に紹介していきます。 最初にプロジェクトを作ろう 今回は「WPFアプリケーション」で DIMultiLanguageTest というプロジェクトを作りましょう。フレームワークは「.NET 9.0」を利用します。 プロジェクトに Views と ViewModel フォルダを作ります。 そして開かれた MainWindow.xaml を Views フォルダに移動して、以下のようにします。 <Window x:Class="DIMultiLanguageTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:DIMultiLanguageTest" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="DIMultiLanguageTest" Width="800" Height="450" mc:Ignorable="d"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Menu> <MenuItem Header="Language"> <MenuItem Command="{Binding ToJapaneseCommand}" Header="Japanese" /> <MenuItem Command="{Binding ToEnglishCommand}" Header="English" /> <MenuItem Command="{Binding ToRussianCommand}" Header="Russian" /> </MenuItem> </Menu> <Button Grid.Row="1" Margin="5" Command="{Binding ExecuteGreetingsCommand}" Content="{Binding Greetings}" /> </Grid> </Window> MainWindow.xaml のフォルダを移動したので、このままでは例外で落ちるため、App.xaml を以下のように書き換えます。 <Application x:Class="DIMultiLanguageTest.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:DIMultiLanguageTest" StartupUri="Views/MainWindow.xaml"> <Application.Resources /> </Application> わかると思いますが、MainWindow.xaml を移動した Views\ を StartupUri に書き加えたわけですね。 ...

2025年04月11日 · (2025年06月19日 更新) · 3 分 · ☨もりゃき.xyz☨