概要
画像ビューアを作ります。
- 「画像を開く」ボタンでファイルを選択して画像ウィンドウを表示します。
- 画像ウィンドウは複数表示できます。
- ボタンにはアイコンを付けます。
- 「すべての画像を閉じる」ボタンで、表示されている画像ウィンドウをすべて閉じます。
プロジェクトの作成
新しいプロジェクトの作成でWPFアプリケーション
を、プロジェクト名:GazoMiru
、フレームワーク:.NET 6.0
で作成してください。
画面の作成
スタイルの作成
ソリューションエクスプローラーでApp.xaml
を開きます。
Application.Resources
の中に以下のスタイルを定義します。
<!-- 標準的なウィンドウのスタイル -->
<Style x:Key="StandardWindowStyle"
TargetType="Window">
<Setter Property="ResizeMode"
Value="CanResizeWithGrip" />
</Style>
ステップ5ではTargetType
指定だけの既定スタイルを使いました。
今回はx:Key
でスタイルに名前を付けたものが登場しました。
x:Key
付きのスタイルをコントロールに適用するには、コントロール側で明示的にキーを指定する必要があります。
<!-- 標準的なボタンのスタイル -->
<Style x:Key="StandardButtonStyle"
TargetType="Button">
<Setter Property="Margin"
Value="10" />
<Setter Property="Padding"
Value="10,5" />
</Style>
<!-- 既定のボタンスタイル -->
<Style TargetType="Button"
BasedOn="{StaticResource StandardButtonStyle}" />
BasedOn
指定で元にするスタイルとしてStandardButtonStyle
を指定します。
x:Key
は付けていないのでこれがButton
の既定スタイルになります。
<!-- 画像付きボタンのスタイル -->
<Style x:Key="ImageButtonStyle"
TargetType="Button"
BasedOn="{StaticResource StandardButtonStyle}">
<Setter Property="Margin"
Value="10,10,0,10" />
</Style>
BasedOn
でStandardButtonStyle
のスタイルを取り込んだ後、Margin
の設定を上書きしています。
<!-- 画像付きボタンのテキストスタイル -->
<Style x:Key="ImageButtonTextStyle"
TargetType="TextBlock">
<Setter Property="Margin"
Value="10,5" />
<Setter Property="VerticalAlignment"
Value="Center" />
</Style>
コントロールの配置・設定
デザイナーでGrid
を右クリックし、レイアウトの種類の変更
> StackPanel
を選択します。
StackPanel
のOrientation
をHorizontal
に設定します。
StackPanel
内にButton
を配置します。
ツールボックスからStackPanel
をデザイナーのButton
上にドラッグ&ドロップします。
ツールボックスからImage
をドキュメントアウトラインの「Button
の中のStackPanel
」にドラッグ&ドロップします。
ツールボックスからTextBlock
をドキュメントアウトラインの「Button
の中のStackPanel
」にドラッグ&ドロップします。
これで画像とテキストをコンテンツとするボタンができました。
「Button
の中のStackPanel
」のOrientation
をHorizontal
に設定します。
Button
にStyle="{StaticResource ImageButtonStyle}"
を追加します。
ImageButtonStyle
はApp.xaml
で定義しています。
これがx:Key
付きスタイルの利用の仕方です。
<!-- 画像付きボタンのスタイル -->
<Style x:Key="ImageButtonStyle"
TargetType="Button"
BasedOn="{StaticResource StandardButtonStyle}">
<Setter Property="Margin"
Value="10,10,0,10" />
</Style>
TextBlock
にStyle="{StaticResource ImageButtonTextStyle}"
を追加します。
TextBlock
は折り返さないのでリセット
でWrap
指定を削除します。
↓↓↓↓↓
Button
の開始タグから終了タグまでの行を範囲選択し、Ctrl
+ C
でコピーします。
Ctrl
+ V
で貼り付けてButton
をもう1つ増やします。
コメントも入れます。
TextBlock
のText
を画像を開く
, すべての画像を閉じる
に書き換えます。
次はボタンのアイコンを設定します。
今回はここから画像を持ってきました。
検索ボックスにキーワードを入力し、虫眼鏡ボタンを押します。
開くボタン用のアイコンをキーワード フォルダ
で検索しました。
下の方にあるアイコンを選びました。
size
に32px
を選択し、
color
にrgb(0, 209, 209)
を入力し、
Download file
でPNG
のボタンを押してダウンロードしてください。
もう1つ、すべて閉じる用のアイコンもダウンロードします。
ごみ
でキーワード検索し、ゴミ箱のアイコンを選択します。
同じようにサイズ、色指定してPNG
形式でダウンロードします。
ダウンロードした画像のファイル名をOpen.png
, AllClose.png
にリネームします。
開くボタン用のImage
を選択し、Width
とHeight
に32
を設定し、
Source
の...
ボタンを押してOpen.png
を開きます。
プロジェクトにOpen.png
が追加され、画像が読み込まれました。
画像格納用のフォルダを作って移動します。
プロジェクトを右クリックし、追加
> 新しいフォルダー
を選択します。
img
というフォルダ名にし、Open.png
をimg
フォルダにドラッグ&ドロップして移動します。
プロパティのビルドアクションがリソース
になっていることも確認してください。
別の方法でも画像を追加してみます。
img
フォルダを右クリックし、追加
> 既存の項目
を選択します。
ファイル選択ダイアログでは種類のコンボボックスからイメージファイル
を選択し、AllClose.png
を追加してください。
ビルドアクションがなし
になっているので、リソース
に変更してください。
↓↓↓↓↓
閉じるボタン用のImage
を選択し、Width
とHeight
に32
を設定し、
Source
プロパティのドロップダウンを開き、AllClose.png
を選択します。
開くボタンのSource
プロパティは、プロジェクト直下ではなくimg
フォルダ配下のOpen.png
を参照するよう修正します。
画像が読み込まれました。
画像をプロジェクト直下に配置しておくならSource
プロパティからのファイル参照で画像を追加する方法が
ビルドアクションの設定までやってくれるので楽です。
画像用フォルダを作ってまとめるなら、
- 画像フォルダに画像を「既存ファイル追加」
- ビルドアクションを
リソース
に設定 -
Source
プロパティのコンボボックスから画像選択
の手順がよいでしょう。
開く用のButton
を選択し、名前にOpenButton
を設定し、IsDefault
をONにしてください。
閉じる用のButton
を選択し、名前にAllCloseButton
を設定してください。
ウィンドウの設定
Window
のTitle
に画像を見る
を設定します。
Style="{StaticResource StandardWindowStyle}"
を追加します。
FocusManager.FocusedElement="{Binding ElementName=OpenButton}"
を追加します。
Background
にLightCyan
を設定します。
Height
に100
を、Width
に400
を設定します。
復習ポイント
- 名前付きスタイル
- 画像リソースの利用
- 画像付きボタン