【WPF】MahApps とC#で作るmetro window 入門

当ページのリンクには広告が含まれています。

「WPFでモダンなUIアプリを作りたいけど、どこから手をつければいいかわからない…」そんな時は、手始めにWindowをモダン化しましょう。

本記事では、初心者でも簡単にWPFアプリに美しいデザインを取り入れられるライブラリ「MahApps.Metro」を使ったWindowのモダン化方法を紹介します。

ステップバイステップで解説するので、一緒に魅力的なMetroスタイルのアプリを作ってみましょう!

目次

MahApps.Metroとは?

引用元:MahApps公式ページ

MahApps.Metroは、WPFアプリケーションにモダンなデザインを簡単に取り入れることができるオープンソースのライブラリです。Windowsストアアプリのようなフラットデザイン、Fluent Design Systemを意識したUIを、少ないコードで実現できます。

インストール方法

Nuget の画面イメージ

「ツール」⇒「Nugetパッケージマネージャ」⇒「ソリューションのNugetパッケージの管理」を選択して上記画面を表示、MahAppsで検索し、MahApps.Metroをインストールします。

MahApps.Metro

プロジェクトへの組み込み方

MahApps.Metro でMetroなWindowを作成するには、次の3つの作業が必要です。

  • App.xaml への追記
  • MainWindow.xaml への追記
  • MainWindow.cs の継承元クラスを変更
STEP
App.xaml への追記

App.xamlの<Application.Resource>タグに下記内容を追記します。

        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
                <!-- Theme setting -->
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
STEP
MainWindow.xamlへの追記
MainWindow.xamlへの追加

<Window~>タグを math:MetroWindow に書き換えます。

mah:MetroWindow 

指定位置に下記の1行を追記します。

xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
STEP
MainWindow.xaml の継承元クラスを変更
MainWindow.csへの追加

MainWindowの継承元クラスを Window から MetroWindow に変更します。

    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }

MahApps.Metro の使い方

公式ドキュメント

詳しい使い方は MahApps の公式サイト(https://mahapps.com/docs) をご参照ください。
また、SourceChord さんの「MahApps.Metroを使ってみた」という記事が非常に参考になるので紹介しておきます。

テーマの指定(タイトルバー、Window背景色など)

App.xaml に追加した下記の1行を修正することで、テーマの指定(Windowの背景色、タイトルバーの色)を指定することができます。
初期状態は Light.Blue(背景色がLight、タイトルバーがBlue) が指定されていますので、必要に応じて変更してください。

<!-- Theme setting -->
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml" />

背景色は次の2つの中から指定可能です。背景色を変更することで、テキストボックスやチェックボックスなどの色も適切に調整されます。

Light, Dark

背景色は次の23種類から指定可能です。指定した色に応じてテキストボックスやチェックボックスなどの色も適切に調整されます。

Red, Green, Blue, Purple, Orange, Lime, Emerald, Teal, Cyan, Cobalt, Indigo, Violet, Pink, Magenta, Crimson, Amber, Yellow, Brown, Olive, Steel, Mauve, Taupe, Sienna

サンプルソース

MahAppsには、Window(MetroWindow)以外に様々なコントロールも用意されていますが、作成中のものも多いのが現状です。
多くの場合、MetroWindowでWindow枠をモダン化し、他のライブラリ(Material Design in XAMLDragablzなど)でコントロールをモダン化することになると思います。

この章で紹介するサンプルソースは、Window枠のモダン化だけを実現するためのものなので、テンプレートとしてお使い下さい。

App.xaml

<Application x:Class="MahAppsSample.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:MahAppsSample"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
                <!-- Theme setting -->
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

    </Application.Resources>
</Application>

MainWindow.xaml

<mah:MetroWindow x:Class="MahAppsSample.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
        xmlns:local="clr-namespace:MahAppsSample"
        GlowBrush="{DynamicResource MahApps.Brushes.Accent}"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
    </Grid>
</mah:MetroWindow>

MainWindow.cs

using MahApps.Metro.Controls;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MahAppsSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

まとめ

この記事では、WPFでモダンなUIを作成するためのライブラリ「MahApps.Metro」の基本的な使い方について解説しました。

Nuget でインストール後、App.xaml、MainWindow.xaml、MainWindow.cs の3ファイルに少し手を加えるだけで、Windowsストアアプリのようなフラットデザインを取り入れた、洗練されたWPFアプリケーションを作成することができます。

WPF標準機能で作成した画面がシンプルに感じたら、是非MahApps.Metroに調整してみてください。
この記事が、あなたのWPF開発の一助となれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次