LoginSignup
20
11

More than 3 years have passed since last update.

Windows GUIプログラミング入門8 画像、ボタン

Last updated at Posted at 2017-03-05

■はじめに

今回は画像の表示と各種ボタンの使い方をやります。

キーワード:Image, Resources, ImageButton, 画像付きボタン, RepeatButton, 長押しボタン, HyperlinkButton, リンクボタン

[注意]
これまでの回で説明済みの操作方法等は、説明を省略したり簡略化している場合があります。

■開発環境

  • Windows 10
  • Visual Studio Community 2015 Update 3
  • .NET Framework 4.x

■作ってみる

◇Image

まずは画像の表示をやります。
star.png ←この画像を保存して使ってください。
ファイル名は star.png にします。

ソリューションエクスプローラーで「Properties」を開いて「Resources.resx」をダブルクリックします。
「リソースの追加」のでドロップダウンから「既存のファイルの追加」で star.png を選択します。
wbg8-01.png

画像が追加されました。
ソリューションエクスプローラーの方もResourcesフォルダが作成され、star.png が追加されています。
wbg8-02.png

star.png を選択し、プロパティの「ビルドアクション」を Resource に設定します。
wbg8-03.png

ツールボックスからImageコントロールを画面デザイナにドラッグ&ドロップします。
ImageコントロールのSourceプロパティのドロップダウンから star.png を選択します。
wbg8-04.png

画面デザイナに反映されました。
wbg8-05.png

参考)Imageコントロールでよく使いそうなプロパティ

プロパティ カテゴリ 備考
Source 共通 イメージファイル
Stretch 共通 イメージ引き伸ばし方法(None/Fill/Uniform/UniformToFill)※参考

◇Button

次はボタンです。普通のは散々使ってきたので画像付きボタンを作ります。

ドキュメントアウトラインの「Grid」を右クリックし、「レイアウトの種類の変更」 - 「StackPanel」を選択します。
wbg8-06.png

ボタンを2つ追加し、以下のようにプロパティを設定します。

<Button Content="Button" Height="30" Width="100" Margin="5"/>
<Button Content="Button" Height="30" Width="100" Margin="5"/>

下のボタンに StackPanelをドラッグ&ドロップします。
wbg8-07.png

StackPanel追加後
wbg8-08.png

StackPanelのOrientatilHorizontalに設定します。
wbg8-09.png

ボタンの中のStackPanelImageをドラッグ&ドロップします。
画面デザイナだとわかりづらいので、ドキュメントアウトラインの方にドロップします。
wbg8-10.png

StackPanelTextBlockをドロップします。
wbg8-11.png

ImageSourceプロパティにstar.pngを設定、不要なプロパティを削除。
TextBlockの方も以下のように設定します。

<Button Content="Button" Height="30" Width="100" Margin="5"/>
<Button Height="30" Width="100" Margin="5">
    <StackPanel Orientation="Horizontal">
        <Image Source="Resources/star.png"/>
        <TextBlock Text="ボタン" VerticalAlignment="Center"/>
    </StackPanel>
</Button>

画像付きボタンの出来上がり。
wbg8-12.png

参考)Buttonコントロールでよく使いそうなプロパティ

プロパティ カテゴリ 備考
Content 共通 ボタンに表示する内容
IsCancel 共通 キャンセルボタンにする(Escキーで押した事になる)
IsDefault 共通 デフォルトボタンにする(Enterキーで押した事になる)

◇RepeatButton

押し続けることで連続的にクリックイベントが発生する長押しボタンです。
RepeatButtonはツールボックスには無いのでタグ入力します。
wbg8-13.png

3つのボタンに同じイベントハンドラを設定します。

<RepeatButton Content="リピート1" Width="120" Click="RepeatButton_Click"/>
<RepeatButton Content="リピート2" Width="120" Delay="1000" Click="RepeatButton_Click"/>
<RepeatButton Content="リピート3" Width="120" Interval="500" Click="RepeatButton_Click"/>
<TextBlock x:Name="repeatText" Text="1" HorizontalAlignment="Center"/>
private void RepeatButton_Click(object sender, RoutedEventArgs e)
{
    repeatText.Text = (int.Parse(repeatText.Text) + 1).ToString();
}

実行してみます。
ボタンを押し続けると下の数字がカウントアップしていきます。
「リピート2」ボタンはボタンを押してから1秒ぐらい経ってからカウントアップが開始します。
「リピート3」ボタンは1秒に2回ぐらいの間隔でカウントアップしていきます。
wbg8-14.png

参考)RepeatButtonコントロールでよく使いそうなプロパティ

プロパティ カテゴリ 備考
Content 共通 ボタンに表示する内容
Delay 共通 ボタンを押してから繰り返し開始までの時間
Interval 共通 繰り返し間隔

◇HyperlinkButton

そんなコントロールは無いですが、こんな感じで作れます。
TextBlockを配置し、その中にHyperlinkタグを記述します。
NavigateUriプロパティに起動するURLを、
RequestNavigateイベントにリンククリック時の処理を記述します。
Hyperlinkタグの開始~終了タグの中に表示するテキストを記述します。

<TextBlock Margin="5">
    <Hyperlink NavigateUri="http://help.qiita.com/" RequestNavigate="Hyperlink_RequestNavigate">Qiitaヘルプ</Hyperlink>
</TextBlock>

wbg8-15.png

リンククリック時の処理を記述します。

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    // 絶対URIを起動
    System.Diagnostics.Process.Start(e.Uri.AbsoluteUri);
    // イベントを処理済みとしてマークする
    e.Handled = true;
}

◇色々なコントロールでよく使いそうなプロパティ

プロパティ カテゴリ 備考
Opacity 外観 不透明度率。100で通常表示、0で完全に見えなくなる。
Visibility 外観 表示/非表示
IsEnabled 共通 有効/無効
IsTabStop 共通 TABキーでフォーカス移動するか
ToolTip 共通 ツールチップ(ヒント)
Width レイアウト
Height レイアウト 高さ
HorizontalAlignment レイアウト 水平位置
VerticalAlignment レイアウト 垂直位置
Margin レイアウト コントロール間の余白
Padding レイアウト コントロール内部の余白
FontFamily テキスト フォント名
FontSize テキスト フォントサイズ
FontWeight テキスト 太字

おしまい


■参考サイト


<< 最初の記事   < 前の記事   次の記事 >

20
11
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
20
11