26章:10 行でズバリ!! [C#] コントロールのテンプレート化と再利用

    作成2013.04.19

     Silverlight アプリケーションとWPFアプリケーションのコードは完全互換ではなさそうですが、わずかな修正でSilverlight アプリケーション用サンプルコードをWPFアプリケーション用コードに変換できます。
     ここでは、Silverlight アプリケーション用サンプルコードをWPFアプリケーション用コードに変換します。
     10 行でズバリ!! [C#] コントロールのテンプレート化と再利用は下記の参照元情報から作成方法の説明と解説を参照できます。

  1. 参照元情報
     10 行でズバリ!! [C#] コントロールのテンプレート化と再利用
    「10 行でズバリ!! [C#] コントロールのテンプレート化と再利用」にジャンプする
     作成方法の詳細は上記を参照願います。


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


  3. Templates.slnの実行
    (1)「Express 2012 for Windows Desktop」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)操作画面が表示されます。
    (4)動作確認はありません。
    (5)クローズボックスで終了します。


  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="254" Width="366">
    
        <Window.Resources>
            <Style x:Key="MyTextBoxStyle" TargetType="TextBox">
                <Setter Property="Margin" Value="5" />
                <Setter Property="Background" Value="Yellow" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="TextBox">
                            <Border x:Name="Border" CornerRadius="15"  
                                        Background="{TemplateBinding Background}"  
                                        BorderBrush="{TemplateBinding BorderBrush}"  
                                        BorderThickness="{TemplateBinding BorderThickness}" >
                                <ScrollViewer x:Name="PART_ContentHost"/>
                                <!--<ScrollViewer x:Name="ContentElement" BorderThickness="0" IsTabStop="False"/>-->
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Window.Resources>
        <Grid x:Name="LayoutRoot">
            <StackPanel>
                <TextBox x:Name="textBox1" Width="120"  
                         BorderBrush="Red" BorderThickness="3" 
                         Style="{StaticResource MyTextBoxStyle}" Text="Heiio,Folks!" HorizontalContentAlignment="Center" />
                <TextBox x:Name="textBox2" Width="120" 
                         BorderBrush="Green" BorderThickness="5" 
                         Style="{StaticResource MyTextBoxStyle}" Text="こんにちは!" HorizontalContentAlignment="Center" />
            </StackPanel>
        </Grid>
    </Window>
    


  6. MainWindow.xamlコードの解説
    (1)VB とC#は同一となります。
    (2)<UserControl.Resources> が<Window.Resources>となります。
    (3)<ScrollViewer x:Name="ContentElement" BorderThickness="0" IsTabStop="False"/>が<ScrollViewer x:Name="PART_ContentHost"/>となります。
    (4)要素がコンテンツ ホストであることを示すには、その要素に特別な名前 PART_ContentHost を付けます。コンテンツ ホスト要素は、ScrollViewer または AdornerDecorator でなければなりません。(なぜだろうか?)


  7. MainWindow.xaml.csの全コード
     MainWindow.xaml.csのコードはありません。
    


  8. MainWindow.xaml.csコードの解説
     MainWindow.xaml.csのコードはありません。



    感想:
    (1)VBからC#への変換は、何もありません。







27章:10 行でズバリ!! [C#] リスト アイテムの表現に行く。

トップページに戻る。