29章:チュートリアル28:WPFピクチャ ビューアーの作成

    作成2013.04.01

     ここでは、Windowsフォームアプリケーション用サンプルコードをWPFアプリケーション用コードに変換しま す。フォームアプリケーションからWPFアプリケーションへの変化が最近の主流のようです。

  1. 参照元情報
    「ピクチャ ビューアーの作成」にジャンプする
    「WPF - Windows フォーム用のコントロールを使う」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. フォームアプリケーションからWPFアプリケーションへの変更
     若干の変更でフォームアプリケーションからWPFアプリケーションへの変更ができます。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [WPFピクチャ ビューアーの作成]をダウンロードする。
     解凍すると「29WpfAPictureViewer」フォルダーがあります。
    注(1)「29WpfAPictureViewer」フォルダーの「WpfAPictureViewer.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「WpfAPictureViewer.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. WpfAPictureViewer.slnの実行
    (1)「Microsoft Visual Basic 2010 Express」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)MainWindow画面が表示されます。
    (2)「Show a picture」ボタンを押します。
    (3)OpenFileDialogが表示されますので、画像ファイルを選択し開きます。
    (4)選択した画像が表示されます。
    (5)最大化ボタンを押すとウインドウは画面いっぱいに広がります。
    (6)Strech(CheckBox)のチェックをはずすと縦横比が変化します。
    (7)チェックをいれた状態でSet thebackground colorボタンを押すとColorDiaalogが表示されます。
    (8)色を選択しOKボタンを押すと背景色が変わります。
    (9)Clear the pictureボタンを押すと背景色のみになります。
    (10)Closeボタンをおすとプログラムは終了します。


  4. プロジェクトの構成
    (1)UserControl1.vbの構成
    ・OpenFileDialog1とColorDialog1とPicturBox1を配置します。

    (2)XAMLコードの構成
    ・UserControl1とCheckBoxとButtonを配置します。

    注:OpenFileDialog1とColorDialog1とPicturBox1がフォームアプリケーション用のツールとなります。


  5. XAMLの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        xmlns:self="clr-namespace:WpfAPictureViewer"
        Title="MainWindow" Height="350" Width="525">
        <Grid>
    
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="30" />
            </Grid.RowDefinitions>
            <WindowsFormsHost x:Name="wfHost"  Grid.Row="0">
                <self:UserControl1 x:Name="myControl"  />
            </WindowsFormsHost>
            <StackPanel Grid.Row="1"  Name="StackPanel1"  Orientation="Horizontal">
                <CheckBox Content="Stretch" Height="16" Width="100" Name="CheckBox1"  IsChecked="True" />
                <Button Content="Show a picture" Height="23" Name="Button1" />
                <Button Content="Clear the picture" Height="23" Name="Button2" />
                <Button Content="Set the background color" Height="23" Name="Button3"  />
                <Button Content="Close" Height="23" Name="Button4"  />
            </StackPanel>
        </Grid>
    </Window>
    


  6. XAMLのポイント
    (1)<Window>階層1:クラス:以下の記載が特別です。
     xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
     上記の記載はMaskedTextBoxクラスを使用するための記載です。MaskedTextBoxクラスは名前空間が System.Windows.Formsであり具体的にはsystem.windows.forms.dll 内にあると思われます。
    xmlns:self="clr-namespace:WpfAPictureViewer"
     上記の記載はWpfAPictureViewerソリューションを使用するための記載です。
    (2) <WindowsFormsHost x:Name="wfHost" Grid.Row="0">
    <self:UserControl1 x:Name="myControl" />
    </WindowsFormsHost>
     上記の記載でUserControl1の使用条件を設定します。名前は"myControl" となります。
    (3)<StackPanel Grid.Row="1" Name="StackPanel1" Orientation="Horizontal">
    <CheckBox Content="Stretch" Height="16" Width="100" Name="CheckBox1" IsChecked="True" />
    <Button Content="Show a picture" Height="23" Name="Button1" />
    <Button Content="Clear the picture" Height="23" Name="Button2" />
    <Button Content="Set the background color" Height="23" Name="Button3" />
    <Button Content="Close" Height="23" Name="Button4" />
    </StackPanel>
     上記の記載でCheckBoxとButtonを配置します。


  7. Class MainWindowクラスの全コード
    Class MainWindow
        Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
            If myControl.OpenFileDialog1.ShowDialog() = Forms.DialogResult.OK Then
                myControl.PictureBox1.Load(myControl.OpenFileDialog1.FileName)
            End If
        End Sub
    
        Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
            myControl.PictureBox1.Image = Nothing
        End Sub
    
        Private Sub Button3_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button3.Click
            If myControl.ColorDialog1.ShowDialog() = Forms.DialogResult.OK Then
                myControl.PictureBox1.BackColor = myControl.ColorDialog1.Color
            End If
        End Sub
    
        Private Sub Button4_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button4.Click
            Close()
        End Sub
    
        Private Sub CheckBox1_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox1.Checked
            myControl.PictureBox1.SizeMode = Forms.PictureBoxSizeMode.Zoom
        End Sub
    
        Private Sub CheckBox1_Unchecked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox1.Unchecked
            myControl.PictureBox1.SizeMode = Forms.PictureBoxSizeMode.StretchImage
        End Sub
    End Class
    


  8. Class MainWindowクラスのコード解説
    (1)Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    If myControl.OpenFileDialog1.ShowDialog() = Forms.DialogResult.OK Then
    myControl.PictureBox1.Load(myControl.OpenFileDialog1.FileName)
    End If
    End Sub
     上記の記載でOpenFileDialog1で選択した画像ファイルをPictureBox1に表示します。
    (2)Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
    myControl.PictureBox1.Image = Nothing
    End Sub
     上記の記載でPictureBox1の画像を消去します。
    (3)Private Sub Button3_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button3.Click
    If myControl.ColorDialog1.ShowDialog() = Forms.DialogResult.OK Then
    myControl.PictureBox1.BackColor = myControl.ColorDialog1.Color
    End If
    End Sub
     上記の記載でColorDialog1で選択した色を背景色に設定します。
    (4)Private Sub Button4_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button4.Click
    Close()
    End Sub
     上記の記載でプログラムを終了します。
    (5)Private Sub CheckBox1_Checked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox1.Checked
    myControl.PictureBox1.SizeMode = Forms.PictureBoxSizeMode.Zoom
    End Sub
     上記の記載でPictureBox1をZoomモードに設定します。
    (6)Private Sub CheckBox1_Unchecked(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles CheckBox1.Unchecked
    myControl.PictureBox1.SizeMode = Forms.PictureBoxSizeMode.StretchImage
    End Sub
     上記の記載でPictureBox1をStretchImageモードに設定します。


  9. Public Class UserControl1クラスのコード
     Public Class UserControl1クラスのコードの記載はありません。

    感想:
    (1)UserControlを使用することにより、以外と簡単にWPFアプリケーションに変換できました。






30章:チュートリアル29:WPF迷路の作成に行く。

トップページに戻る。