【入門編】【上級者向け】WPFアプリへのFluent Design System / ModernWpf UI導入によるレガシー感払拭のモダン化手法 – Visual Basic (VB / VB.NET)解析バイブル

スポンサーリンク
スポンサーリンク

脱・レガシー!VB.NET WPFアプリをWindows 11風のモダンUIへ進化させる「ModernWpf」活用術

「せっかく業務効率化のためにVB.NETでツールを作ったのに、見た目がWindows XP時代のようなグレーの画面で、なんだか古臭い……」

そんな悩みを感じたことはありませんか?
プログラミングの世界では、ロジック(中身)がどれほど完璧でも、UI(見た目)がユーザーに「使いにくそう」「信頼できなさそう」という印象を与えてしまうと、そのツールの価値は半減してしまいます。

こんにちは。今日は、皆さんが書いた大切なコードを、一瞬にしてWindows 11のような洗練された「Fluent Design System」へと昇華させる魔法のような手法をお伝えします。

ターゲットは、WPF (Windows Presentation Foundation)。
そして、その救世主となるのがオープンソースライブラリ「ModernWpf」です。

「難しそう……」と身構える必要はありません。ここをクリアすれば、Visual Basic (VB.NET) のUI構築の基本はバッチリですよ。さあ、一緒にモダンな開発の世界へ踏み出しましょう!

1. なぜ「見た目」が重要なのか? — アーキテクトの視点

エンジニアとして、まず理解してほしい「本質」があります。
UIのモダン化とは、単にボタンの色を綺麗にすることではありません。

  • 視覚的階層(Visual Hierarchy): 何が重要で、何が背景なのかをユーザーに直感的に伝えること。
  • 一貫性(Consistency): Windowsの標準操作(ダークモードへの切り替え、角丸のボタンなど)と調和させること。
  • 認知負荷の軽減: 余計な装飾を削ぎ落とし、ユーザーが迷わない設計にすること。

従来のWindows Formsや、設定を忘れた初期状態のWPFは、これらの要素が不足しがちです。そこで、「既存のコントロールの見た目(テンプレート)を、モダンな定義で上書きする」という戦略をとるのです。

2. 準備:ModernWpfをプロジェクトに召喚する

まずは、あなたのプロジェクトに「モダンな装飾セット」を導入しましょう。これには NuGet(ヌゲット) というパッケージ管理ツールを使います。

手順

1. Visual Studio で WPF アプリケーション(VB.NET)を開きます。
2. メニューの [ツール] → [NuGet パッケージ マネージャー] → [ソリューションの NuGet パッケージの管理] を選択。
3. 「参照」タブで `ModernWpfUI` を検索し、インストールします。

これだけで、あなたのプロジェクトは「モダンな部品」を手に入れる準備が整いました。

3. 実践:App.xaml への魔法の記述

ここが最も重要なステップです。一つ一つのボタンを書き換える必要はありません。アプリ全体の「ルール」を書き換えるのです。

`App.xaml` を開き、以下のように `ResourceDictionary` を追加してください。

<!-- App.xaml -->
<Application x:Class="WpfApp1.Application"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp1"
             xmlns:ui="http://schemas.modernwpf.com/2019" 
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <!-- ここが魔法の呪文:ModernWpfのスタイルをアプリ全体に適用します -->
                <ui:ThemeDictionary />
                <ui:XamlControlsDictionary />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

【ここがポイント!】

  • `xmlns:ui=”…”`: これにより、XAMLの中で `ui:` という接頭辞を使ってModernWpfの機能を使えるようになります。
  • `MergedDictionaries`: これは「既存のスタイル設定を、新しい設定と合体させる」という意味です。これにより、標準の `Button` や `TextBox` が、自動的にモダンな見た目に差し替わります。

4. 実践:MainWindow.xaml でモダンな要素を使う

次に、実際の画面を作ってみましょう。標準のコントロールを使うだけでも十分綺麗になりますが、ModernWpf特有のコントロールを使うと、より「Windows 11らしさ」が増します。

<!-- MainWindow.xaml -->
<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ui="http://schemas.modernwpf.com/2019"
        Title="モダンなVB.NETアプリ" Height="450" Width="800"
        Background="{DynamicResource ApplicationPageBackgroundThemeBrush}">
    
    <Grid Margin="20">
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Width="300">
            
            <TextBlock Text="設定メニュー" 
                       FontSize="28" 
                       Margin="0,0,0,20" 
                       HorizontalAlignment="Center"
                       FontWeight="Bold"/>

            <!-- 標準のButtonでも、App.xamlの設定によりモダンな見た目になります -->
            <Button Content="保存する" 
                    Margin="0,10" 
                    Style="{StaticResource AccentButtonStyle}"/> <!-- アクセントカラー適用 -->

            <!-- ModernWpf特有のスイッチコントロール -->
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,10">
                <TextBlock Text="ダークモード有効" VerticalAlignment="Center" Margin="0,0,10,0"/>
                <ToggleSwitch x:Name="ThemeToggle" 
                              OnContent="" OffContent="" 
                              IsOn="True" 
                              Toggled="ThemeToggle_Toggled"/>
            </StackPanel>

        </StackPanel>
    </Grid>
</Window>

5. ロジック:VB.NET でテーマを切り替える

「見た目」が決まったら、次は「動き」です。ユーザーがスイッチを操作したときに、アプリのテーマ(ライト/ダーク)を切り替えるコードを書いてみましょう。

`MainWindow.xaml.vb` に以下のコードを記述します。

' MainWindow.xaml.vb

Class MainWindow
    ''' <summary>
    ''' トグルスイッチが操作された時のイベントハンドラ
    ''' </summary>
    ''' <param name="sender">イベントの発生源</param>
    ''' <param name="e">イベント引数</param>
    Private Sub ThemeToggle_Toggled(sender As Object, e As RoutedEventArgs)
        ' ToggleSwitchを取得
        Dim toggle As ToggleSwitch = TryCast(sender, ToggleSwitch)
        If toggle Is Nothing Then Return

        ' モダンWPFのテーマを切り替えるロジック
        ' ここでは、IsOnの状態に基づいてThemeDictionaryを操作します
        If toggle.IsOn Then
            ' ライトモードへ
            ModernWpf.Controls.Theme.RequestedTheme = ModernWpf.Controls.Theme.ThemeMode.Light
        Else
            ' ダークモードへ
            ModernWpf.Controls.Theme.RequestedTheme = ModernWpf.Controls.Theme.ThemeMode.Dark
        End If
    End Sub
End Class

【プロのアドバイス:陥りやすいエラー】

初心者がよく陥るのが、「NullReferenceException(参照エラー)」です。
`ThemeToggle_Toggled` が、画面が完全に読み込まれる前(コンストラクタの段階)に実行されてしまうことがあります。
上記のコードのように `TryCast` を使い、オブジェクトが正しく存在するかチェックする癖をつけると、アプリのクラッシュを劇的に減らせますよ。

6. まとめ:極限の知見を日常に

今回の手法は、いわば「外装のフルモデルチェンジ」です。
エンジンの仕組み(ビジネスロジック)を一切変えることなく、見た目(UI)だけを最新鋭のものに入れ替えることができました。

今日学んだことの振り返り:
1. ModernWpf を NuGet で導入する。
2. `App.xaml` の `MergedDictionaries` にスタイルを登録し、アプリ全体に適用する。
3. `DynamicResource` を活用して、テーマ変更に追従する設計にする。
4. VB.NET 側では、テーマのプロパティを操作して動的な変化を実現する。

「コードを書くこと」は手段であり、「価値あるツールを提供すること」が目的です。モダンなUIを備えたツールは、それだけでユーザーの信頼を勝ち取ることができます。

さあ、次はあなたの手で、その古めかしいアプリケーションに新しい命を吹き込んでみてください。応援していますよ!

タイトルとURLをコピーしました