WPFを使ってみる。VB.NET


VB Tips And Sample(HOME)(VB.NET Sample インデックス)

WPF(Windows Presentation Foundation)

とは、勝手に・下衆の勘ぐり的に、自分なりに訳してみると、

アップルのiPadに負けない見た目と機能性を.NTEで作成できるようにする為いろいろ考えた。
VBなりC#の、従来のFormベースのプログラミングではどうしても無理。
じゃあ、別のものを作ったら?
最近WEBの画像は見た目がすごくきれい。iPadにも負けてない。
だったらXMLベースで行けたら・・・。というわけで、XAML(ザムル「基本XML」)誕生!
動作コードはVBなりC#のままがいい。
と言うことで、できたのがWPFではなかろうか? 当然Windowsでないと動かない。

やってみると、次の特徴があるようだ。詳しくはVBプログラマの為のWPF入門を参考にしてください。

  • コントロールの中に、別のコントロールを配置可能。ボタンに小さな写真をつけるとか・・・カッコいいボタンが作れる
  • デザインはXAMLで。動作は従来のままで。
  • コントロールの配置・レイアウトのパネルが多く用意されている。大きさ、位置など、「そろえる」事が容易になった。
  • PDFみたいに、印刷、文字検索等ができるファイルフォーマットで保存したり、表示することが可能な「XPS」が扱える。

他にも、サウンド、ビデオなどの再生が超簡単にできる、3Dアニメを作れる、などあるけれど、細かに作っていくにはまだ無理っぽい?
なので、使う場合は、「見た目をカッコよくするために」使うのではないだろうか?
だったら、カッコいいボタンをWPFのユーザコントロールで作って、後は、WindowsFormで豊富なコントロールなどで作るのがやりいいのかも?

因みにWPFでも、通常のFormコントロールは使用可能との事。WindowsFromHostの中にコントロールのタグを直接書いて実装する方法との事だ。
実際やってみたが、VBのよさ(コントロールの大きさや見た目を見ながら調節できる)が損なわれるようで、うーん。
どうなんでしょう?

では、まずは超簡単なもの。
プロジェクトの新規作成で、WPFアプリケーションを選択して、開始。
フォームみたいなものに、ツールボックスから、ボタンをドラッグドロップ。
ボタンのテキスト「Content」をHello Worldに書き換え。
XAML内が自動的に書き換わっている。
wpf vb
ボタンをダブルクリック。
MessageBox.Show("Hello World")
を書いて、F5で、実行。 wpfでHello World

次に、画像つきのボタンを作成してみる。

してみると、ボタンはドラッグドロップ。
その中に、StackPanelをドラッグドロップすると、どうもXAMLでは、入れ子にならず、おかしくなる。
XAMLでコピペしてもおかしい。
と言うわけで、ボタンをドラッグドロップした後は、XAMLで直接書いていく。
するとうまく行った。 ボタンクリックイベントもStackPanel・ラベル・イメージに止められず、起こっているようだ。

	<Window x:Class="MainWindow"
	    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	    Title="MainWindow" Height="350" Width="525">
	    <Grid>
	        <Button Height="200" Width="200" Name="Button1">
	            <StackPanel Width="165" Height="152" Orientation="Horizontal">
	                <Image Source="C:\Users\admin\Documents\Visual Studio 2010\Projects\HelloWorld\HelloWorld\wpf1.png" Height="84" Width="83"></Image>
	                <Label Content="Hello World" Height="50" Width="80" BorderBrush="Black" Background="#FFD47A7A"></Label>
	            </StackPanel>
	        </Button>
	
	    </Grid>
	</Window>
	
イメージつきボタン

次に、リソースディクショナリにスタイルを別定義

して、
Labelの文字の大きさを変えてみる。
プロジェクトに、リソースディクショナリ「Dictionary1.xaml」を追加。

	<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style x:Key="MyStyle">
        <Setter Property="Label.FontSize" Value="20"></Setter>
    </Style>
	</ResourceDictionary>
	
	
	<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary>
        </Grid.Resources>
        <Button Height="200" Width="200" Name="Button1">
            <StackPanel Width="165" Height="152" Orientation="Horizontal">
                <Image Source="C:\Users\admin\Documents\Visual Studio 2010\Projects\HelloWorld\HelloWorld\wpf1.png" Height="84" Width="83"></Image>
                <Label Style="{StaticResource ResourceKey=MyStyle}"  Content="Hello World" Height="40" Width="80" BorderBrush="Black" Background="#FFD47A7A"></Label>
            </StackPanel>
        </Button>

    </Grid>
	</Window>
	
リソースでスタイル指定

ひとまず、まとめ

デザインは、デザインをする人に大きく左右される。
イラストレータを持っている人が全員、カッコいいサイト用画像、ボタン用画像を作れるわけではない。
なので、結局はデザイン力に大きく左右されることになる。
@ITに「“見た目”を決めるコントロール・テンプレート」が掲載されているが、
ちょっと大きなプロジェクトだと、それこそ初めにテンプレートを作成して、みんなで使いまわしをしていくことが必要と言うことになる。
そうなると、どこまでデザインを行うのか(デフォルトを変えるのか?)で、結構悩むことになるのはなかろうか?
見やすく・分かりやすくデザインを変えたつもりが、かえってユーザには分からないものになるといった事も生じるだろう。
要はボタンはボタンらしくという、ボタンの概念を変えるデザインはするべきではないと思う。
すると、画像をつけ、ちょっとグラデーションをつけ、3Dぽくみせ、角を丸め、影をつけ・・・といった小技などで十分な気がするのだが・・・ どこに進んでいくのか?
ワードプレスのテンプレートみたいに、ボタンなどコントロールのデザインテンプレートが出回るようになると助かるな~。


VB Tips And Sample(HOME)(VB.NET Sample インデックス)