21章:10 行でズバリ !! コントロール間の連携 (C#)

    作成2013.04.17

     10 行でズバリ !! コントロール間の連携 (C#)は下記の参照元情報からほぼ完全な作成方法の説明と解説を参照できます。

  1. 参照元情報
     10 行でズバリ !! コントロール間の連携 (C#)は
    「10 行でズバリ !! コントロール間の連携 (C#)」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. 10 行でズバリ !! コントロール間の連携 (C#)の完成ファイル
     10 行でズバリ !! コントロール間の連携 (C#)の作成の解説とおりに作業を実施すると、C#プロジェクトファイル群が完成しますが、 ここでは、VBで作成したプログラムをC#言語に変換を基本とします。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [10 行でズバリ!! リスト アイテムの表現 (C#)]をダウンロードする。
     解凍すると「21PropBinding」フォルダーがあります。
    注(1)「21PropBinding」フォルダーの「PropBinding.sln」ファイルをダブルクリックすると「Express 2012 for Windows Desktop」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「PropBinding.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. PropBinding.slnの実行
    (1)「Express 2012 for Windows Desktop」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)操作画面が表示されます。
    (4)comboBoxをクリックすると文字の色を変えることができます。
    (6)クローズボックスで終了します。


  4. 新規プロジェクトの作成
    (1)MainWindow.xamlのデザイン設定
     新規プロジェクトを作成すると「デザイナー」にはMainWindow.xamlが自動生成されます。MainWindow.xamlのデザイン設定はVBのMainWindow.xamlのコピー&ペーストで完成します。

    (2) MainWindow.xaml.csコード
     基本コードが自動生成されます。


  5. MainWindow.xamlの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:mscorlib="clr-namespace:System.Reflection;assembly=mscorlib" >
    
        <Window.Resources>
            <!-- PropertyInfo オブジェクトに適用するデータ テンプレート -->
            <DataTemplate DataType="{x:Type mscorlib:PropertyInfo}">
                <StackPanel Orientation="Horizontal" Margin="3">
                    <Border BorderBrush="Black" BorderThickness="2"
                            CornerRadius="5" Width="20" Height="20"
                            Background="{Binding Path=Name}" />
                    <TextBlock Margin="5,0,5,0" Text="{Binding Path=Name}"/>
                </StackPanel>
            </DataTemplate>
        </Window.Resources>
    
        <StackPanel Background="LightPink">
            <TextBox Name="textBox1" Margin="5" Text="TEST"/>
            <Slider Name="slider1" Margin="5" Minimum="10" Maximum="50" Value="30"/>
    
            <ComboBox Name="comboBox1" Margin="5" Width="150" 
                     MaxDropDownHeight="300"
                      Loaded="comboBox1_Loaded" />
    
            <TextBlock Name="textBlock1" Margin="5" TextWrapping="Wrap"
                       Text="{Binding ElementName=textBox1, Path=Text}"
                       FontSize="{Binding ElementName=slider1, Path=Value}"
                       Foreground="{Binding ElementName=comboBox1, Path=SelectedValue.Name}" />
        </StackPanel>
    </Window>
            </Ellipse>
        </Canvas>
    </Window>
    


  6. MainWindow.xamlコードの解説
    <Window>階層1:クラス:
        <Window.Resources>階層2-1:プロパティ:
            <DataTemplate>階層3-1:クラス:
                <StackPanel>階層4-1:クラス:
                    <Border/>階層5-1:クラス:
                    <TextBlock />階層5-1:クラス:
                </StackPanel>
            </DataTemplate>
        </Window.Resources>
    
        <StackPanel>階層2-2:クラス:
            <TextBox/>階層3-2:クラス:
            <Slider/>階層3-2:クラス:
            <ComboBox/>階層3-2:クラス:
            <TextBlock/>階層3-2:クラス:
        </StackPanel>
    </Window>
    
    (1)XAMLを理解するには、まずXAMLの階層構造を理解する必要があります。(サンプルは上記のようになります。)
    (2)<Window>階層1:クラス:以下の記載が特別です。
     xmlns:mscorlib="clr-namespace:System.Reflection;assembly=mscorlib"
     上記の記載はPropertyInfoクラスを使用するための記載です。PropertyInfoクラスは名前空間が System.Reflectionであり具体的にはmscorlib.dll内にあると思われます。(標準設定では、参照できないようです。)
    (3)<Window.Resources>階層2-1:プロパティ:ローカルで定義されたリソース ディクショナリを取得または設定します。
    (4)<DataTemplate>階層3-1:クラス:データ オブジェクトのビジュアル構造を記述します。
    (5)<Border/>階層5-1:クラス:別のオブジェクトの周囲に境界線、背景、またはその両方を描画します。
    (6)<TextBlock />階層5-1:クラス:少量のフロー コンテンツを表示する軽量コントロールを提供します。
    (7) <StackPanel>階層2-2:クラス:StackPanel

    注:イベント ハンドラーの本体をコードで記述します。このため、XAML エディター上で、上記の Loaded="comboBox1_Loaded" の部分をマウスで右クリックし、コンテキスト メニューから [イベント ハンドラーへ移動] をクリックします。これにより、comboBox1_Loaded メソッドが自動的に作成され コード エディターが開きます。


  7. MainWindow.xaml.csの全コード
    using System.Windows;
    using System.Windows.Media;
    using System.Reflection;
    
    namespace PropBinding
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void comboBox1_Loaded(object sender, RoutedEventArgs e)
            {
                // PropertyInfo オブジェクトの配列をデータ バインディング
                PropertyInfo[] colorProps = typeof(Colors).GetProperties();
                this.comboBox1.ItemsSource = colorProps;
                // 最初は先頭の項目が選択されている状態にする
                this.comboBox1.SelectedIndex = 0;
            }
        }
    }
    


  8. MainWindow.xaml.csコードの解説
    (1)using System.Reflection;:PropertyInfo[] は名前空間が System.Reflectionのmscorlib.dll内にあり、これを使用するため、先頭に記載する必要がありそうです。
    (2)private void comboBox1_LoadedはcomboBox1をロードするとき呼び出されます。
    (3) PropertyInfo[] colorProps = typeof(Colors).GetProperties();は変数colorPropsをPropertyInfo[] 型で生成します。
    (4)this.comboBox1.ItemsSource = colorProps;はthis.ComboBox1.ItemsSourceに変数colorPropsの値を代入します。
    (5)this.ComboBox1.SelectedIndex = 0は先頭項目を選択します。



    感想:
    (1)VB とC#はほぼ同じです。







22章:10 行でズバリ!! [C#] WPF - Windows フォーム用のコントロールを使うに行く。

トップページに戻る。