XAMLを使わないWPF入門08「スライダーの値をラベルにバインド」

コンピュータ

スライダーコントロールの値をラベルにバインドし表示します。

プロジェクトの作成

cd (mkdir NoXAML08)
dotnet new wpf -f net8.0
rm *.xaml
rm MainWindow.xaml.cs

ソースコード

ファイル名:NoXAML08.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UseWPF>true</UseWPF>
    <StartupObject>NoXAML08.App</StartupObject>
  </PropertyGroup>

</Project>

ファイル名:App.xaml.cs

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

namespace NoXAML08;

public partial class App : Application
{

    // エントリポイント
    [STAThread]
    public static void Main()
    {
        var app = new App();
        app.Startup += (sender, e) =>
        {
            // ウィンドウの構築と表示
            var window = new Window
            {
                Title = "XAMLなしSliderバインディング",
                Width = 300,
                Height = 100,
            };
            // StackPanel(横方向)
            var panel = new StackPanel
            {
                Orientation = Orientation.Horizontal
            };
            // Sliderの作成
            var slider = new Slider
            {
                Name = "Slider1",
                Width = 120,
                Minimum = 1,
                Maximum = 100,
                SmallChange = 1,
                LargeChange = 2,
                Value = 10
            };
            // Labelの作成とバインディング設定
            var label = new Label();
            var binding = new Binding("Value")
            {
                Source = slider,
                Mode = BindingMode.OneWay
            };
            label.SetBinding(Label.ContentProperty, binding);
                                    
            // 要素をStackPanelに追加
            panel.Children.Add(slider);
            panel.Children.Add(label);            

            // ウィンドウにStackPanelを設定
            window.Content = panel;

            window.Show();

        };
        app.Run();
    }
}

実行

dotnet run

コメント