LoginSignup
46
52

More than 3 years have passed since last update.

WPFの軽量UIツールキット AdonisUIを試す

Posted at

AdonisUIでレトロモダンなWPFを

概要

MaterialDesign in XAML ToolkitでWPFにも今風っぽい外観を持ち込んで、いい気になってた。
しかし、DLL類だけで4MB少々あって重い。良くも悪くもマテリアルデザイン。
HandyControls も試してみたが、HandyControlもHandyControlsも多言語化対応して高機能ゆえにコンポーネントはそこそこ魅力的だけど、ちょっと扱いづらかった。

というわけで、軽くて丁度いいコンポーネントがないか検索していたら単体でダークモードにするテーマ機能もあるAdonisUIというのがあったので、試してみた。

イラチな方は GitHub から デモ を落とすと良い。

インストール

公式ページのGetting startedどおりに。

  • NuGet でパッケージインストール

image.png

  • App.xaml に以下記述
App.xaml(抜粋)
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/AdonisUI;component/ColorSchemes/Light.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/AdonisUI.ClassicTheme;component/Resources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

ガワであるWindowコンポーネントも、代替品が用意されているので、お試しに使ってみる。
トップレベルをWindowの代わりにcontrols:AdonisWindowとする。
既存Windowを継承したのでなく別実装されたものらしくOS標準の状態(テーマ等)を受け継がないので、使いかたには注意が必要そう。

MainWindow.xaml(抜粋)
<controls:AdonisWindow
    x:Class="LivetAdonisUiTut01.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
    xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
    xmlns:v="clr-namespace:LivetAdonisUiTut01.Views"
    xmlns:vm="clr-namespace:LivetAdonisUiTut01.ViewModels"
    xmlns:adonisUi="clr-namespace:System.Drawing;assembly=System.Drawing"
    xmlns:adonisUi1="clr-namespace:AdonisUI;assembly=AdonisUI"
    xmlns:adonisExtensions="clr-namespace:AdonisUI.Extensions;assembly=AdonisUI"
    xmlns:controls="clr-namespace:AdonisUI.Controls;assembly=AdonisUI"
    xmlns:livetAdonisUiTut01="clr-namespace:LivetAdonisUiTut01"
    Title="MainWindow"
    Width="525"
    Height="350"
    PlaceTitleBarOverContent="True"
    >

    <controls:AdonisWindow.TitleBarContent 
        >
        <StackPanel Orientation="Horizontal"
                    HorizontalAlignment="Right">
            <Button Content="?"
                    Style="{DynamicResource {x:Static adonisUi1:Styles.WindowButton}}"
                    FontFamily="Segoe UI"
                    FontSize="14"/>
        </StackPanel>
    </controls:AdonisWindow.TitleBarContent>

    <Window.Style>
        <Style TargetType="Window" BasedOn="{StaticResource {x:Type Window}}"/>
    </Window.Style>

    <Window.DataContext>
        <vm:MainWindowViewModel />
    </Window.DataContext>
(以下略)

ついになる MainWindow.xaml.cs も AdonisUI.Controlsをusingして、継承元を Window から AdonisWindow に変更

MainWindow.xaml.cs(抜粋)
using AdonisUI.Controls;

    public partial class MainWindow : AdonisWindow

コンポーネント類

とりあえず最低限動く準備ができたので、コンポーネント類を使っていく。
基本的なコンポーネントはそのままで使える。

共通

ユーザ操作に影響するボタンやテキストボックス等は、マウスオーバーで目立つようになっている

Button

マテリアルデザインではないが、WinFormsのクラシック風とみせかけて、リップル効果のあるボタンに代わる。
adonis-demo-ripple-light.gif

DatePicker

カレンダーボタンが右側にあるテキストボックス。
カレンダーは、曜日表示等、そのまま日本語ロケールが使われる。

image.png

TextBox

変わりなくみえるが、複数行入力などでスクロールバーがある状態のとき、タッチUI向けに(?)フォーカスが外れているときは細いバー表示になるコントロールに代えることができる。

adonis-demo-scrollbar-light.gif

またウェブのテキストボックスでよくある入力前まで表示されるPlaceHolderの淡い文字列をWatermarkという機能として提供されている。

adonis-demo-watermark-light.png

MainWindow.xaml
                 adonisExtensions:ScrollBarExtension.ExpansionMode="NeverExpand"
                 adonisExtensions:WatermarkExtension.Watermark="書いてみてちょ ..."

Loading / ProgressBar

おしゃれでかわいい

adonis-demo-progressbar-light.gif
adonis-demo-loadingdots-light.gif

雑なまとめ

MaterialDesignXAMLtoolkitはDLL類で4MBくらいあるが、AdonisUIは1/10の450KB程度。
さらっと試した感じHandyControlsより手軽で書きやすい。
MessageBox等も扱いやすそう。

ネストしたコントロールをGroupBoxなどでまとめてるケースを代替するレイヤリングシステムを使うと、コントロールの背景色を適切に設定してくれるらしい。ギョーミーなアプリでも視認性の高いUIを提供できそう。

46
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
52