【第2章】Windows Presentation Foundation (WPF) に入門してみる part 1 バインディングを学習する


はじめに

今まで「XAML」「バインディング」などの知識ゼロのままC#のコードだけでGUIを構築してきました。

いよいよ「バインディング」について勉強を始めようと思います。

XAML」「バインディング」はセットだと考えている人もいるかもしれませんが決してそうではありません。

XAML」を使わないで「バインディング」を使用する方法を学習したので紹介させて頂きます。

非常に簡単なサンプル

GUI部分とそうでない部分でファイルを分けてコードを書いています。ファイルは分けていますがクラスを新たに作らず同じクラス内に記述しています。

GUI部分のファイル

using System.Windows;
using System.Windows.Controls;

namespace binding
{
    public partial class MainWindow : Window
    {
        private void WindowSetting()
        {
            StackPanel mainPanel = new() { Orientation = Orientation.Vertical };
            Content = mainPanel;

            Label lastName = new();
            Label firstName = new();
            
            lastName.SetBinding(Label.ContentProperty, "苗字");
            firstName.SetBinding(Label.ContentProperty, "名前");

            mainPanel.Children.Add(lastName);
            mainPanel.Children.Add(firstName);
        }
    }
}

GUI部分でないファイル

using System.Windows;

namespace binding
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            WindowSetting();

            DataContext = new { 苗字 = "Yamada", 名前 = "Taro" };
        }
    }
}

結果

f:id:touch-sp:20210929225910p:plain

画像を表示させるサンプル

GUI部分のファイル

using System.Windows;
using System.Windows.Controls;

namespace imageShow
{
    public partial class MainWindow : Window
    {
        private void WindowSetting()
        {
            Image imagePanel = new();
            Content = imagePanel;

            imagePanel.SetBinding(Image.SourceProperty, "originalImage");
        }
    }
}

GUI部分でないファイル

using System;
using System.Windows;
using System.Windows.Media.Imaging;

namespace imageShow
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            WindowSetting();

            BitmapImage star = new(new Uri(AppDomain.CurrentDomain.BaseDirectory + "/star.png"));

            DataContext = new { originalImage = star };
        }
    }
}

結果

上の単純なコードで画像の縦横比は乱れませんでした。
f:id:touch-sp:20210930082407p:plain
f:id:touch-sp:20210930082417p:plain
Windowsに含まれる「切り取り&スケッチ」で切り取った画像、きれいではありません(笑)。