SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

WPFアプリケーションにテキストブロックのプロパティ変更機能を実装する

ComponentOne Studioを活用したWindowsフォームアプリケーションの作成

  • このエントリーをはてなブックマークに追加

GUIの作成 1

 ではさっそくアプリケーションに、この機能を組み込んでいきましょう。

 前回作成したアプリケーションの、C1ColorPickerコントロールとTextBlockコントロールを削除し、ここにCanvas要素を入れます。

 そして、Canvas要素の中に、氏名用TextBlockの数だけC1PropertyGridコントロールを作成し重ねてレイアウトします。

 C1PropertyGridコントロールは、TextBlockコントロールのText、Background、Foregroundの3つのプロパティだけを表示し、氏名と背景色、文字色を自由に編集できるようにします。

ウィンドウのレイアウト
ウィンドウのレイアウト

C1PropertyGridコントロールの作成

 まずは、C1PropertyGridコントロールを作成します。

 ① すでに配置してあるC1ColorPickerコントロールと「背景色」TextBlockコントロールを削除します。

 ② そのあとにCanvas要素を作成します。Canvas要素は、複数のコントロールを重ねて表示することができるので、C1PropertyGridコントロールを同じ位置で切り替えて表示させることができます。

<Canvas></Canvas>

 ③ Canvas要素の中にC1PropertyGridコントロールを作成します。

<c1:C1PropertyGrid Name="c1PropertyGrid1" />

 ④ 名前を付け、高さと幅、SelectedObjectプロパティを設定します。

 最初の操作対象TextBlockコントロールは「TextBlock2」です。

<Canvas Name="Canvas1" Margin="0,10,0,0">
    <c1:C1PropertyGrid Name="C1PropertyGrid1" Height="74" Width="464"  SelectedObject="{Binding ElementName=TextBlock2, Mode=OneWay}" Visibility="Visible" Margin="70,0,0,0" />

 ⑤ GUIエディタに移ってC1PropertyGridコントロールをクリックします。プロパティウィンドウのAutoGeneratePropertiesプロパティのチェックを外します。

 そして、PropertyAttributesプロパティの値欄にある「...」ボタンをクリックし、コレクションエディタを表示します。

コレクションエディタを表示する
コレクションエディタを表示する

 ⑥ 「追加」ボタンをクリックし、PropertyAttributeオブジェクトを1つ追加します。

PropertyAttributeオブジェクトを1つ追加する
PropertyAttributeオブジェクトを1つ追加する

 ⑥ 右ペインの「その他」をクリックして展開し、次のプロパティを設定します。

DisplayName MemberName
背景色 Background
2つのプロパティを設定する
2つのプロパティを設定する

 ⑦ あと2回「追加」ボタンをクリックし、PropertyAttributeオブジェクトを2つ追加します。

 そして、次のプロパティを設定します。

DisplayName MemberName
文字色 Foreground
氏 名 Text

 ⑧ アプリケーションを実行してみます。設定した3つのプロパティが表示されていればOKです。

設定した3つのプロパティが表示されていればOK
設定した3つのプロパティが表示されていればOK

 ⑨ XAMLウィンドウで、今作成したC1PropertyGridコントロールのコードをコピー・ペーストし、C1PropertyGridコントロールのNameプロパティとBinding ElementNameのTextBlockコントロールの名前を修正します。

<Canvas>
    <c1:C1PropertyGrid Name="C1PropertyGrid1" Height="74" Width="464" SelectedObject="{Binding ElementName=TextBlock2, Mode=OneWay}" Visibility="Visible" Margin="70,0,0,0" AutoGenerateProperties="False">
        <c1:C1PropertyGrid.PropertyAttributes>
            <c1:PropertyAttribute Browsable="True" DisplayName="背景色     " MaximumValue="NaN" MemberName="Background" MinimumValue="NaN" />
            <c1:PropertyAttribute Browsable="True" DisplayName="文字色     " MaximumValue="NaN" MemberName="Foreground" MinimumValue="NaN" />
            <c1:PropertyAttribute Browsable="True" DisplayName="氏 名      " MaximumValue="NaN" MemberName="Text" MinimumValue="NaN" />
        </c1:C1PropertyGrid.PropertyAttributes>
    </c1:C1PropertyGrid>

    <c1:C1PropertyGrid Name="C1PropertyGrid2" Height="74" Width="464" SelectedObject="{Binding ElementName=TextBlock3, Mode=OneWay}" Visibility="Visible" Margin="70,0,0,0" AutoGenerateProperties="False">
        <c1:C1PropertyGrid.PropertyAttributes>
            <c1:PropertyAttribute Browsable="True" DisplayName="背景色     " MaximumValue="NaN" MemberName="Background" MinimumValue="NaN" />
            <c1:PropertyAttribute Browsable="True" DisplayName="文字色     " MaximumValue="NaN" MemberName="Foreground" MinimumValue="NaN" />
            <c1:PropertyAttribute Browsable="True" DisplayName="氏 名      " MaximumValue="NaN" MemberName="Text" MinimumValue="NaN" />
        </c1:C1PropertyGrid.PropertyAttributes>
    </c1:C1PropertyGrid>

        </Canvas>
DisplayNameプロパティ内の空白

 DisplayNameプロパティは、文字列の後に空白を少し入れておくと、リスト表示時に枠内にスペースを付けて表示されます。

 ⑩ C1PropertyGridコントロール「C1PropertyGrid2」をクリックし、プロパティウィンドウのVisibilityプロパティを「Hidden」にします。

<c1:C1PropertyGrid Name="C1PropertyGrid2" Height="74" Width="464" SelectedObject="{Binding ElementName=TextBlock3, Mode=OneWay}" Visibility="Hidden" Margin="70,0,0,0" AutoGenerateProperties="False">

 ⑪ この「C1PropertyGrid2」のコードを4つコピーし、次のようにNameプロパティとBinding ElementNameのTextBlockコントロールの名前を修正します。

Name="C1PropertyGrid3"  SelectedObject="{Binding ElementName=TextBlock4, Mode=OneWay}"
Name="C1PropertyGrid4"  SelectedObject="{Binding ElementName=TextBlock5, Mode=OneWay}"
Name="C1PropertyGrid5"  SelectedObject="{Binding ElementName=TextBlock6, Mode=OneWay}"
Name="C1PropertyGrid6"  SelectedObject="{Binding ElementName=TextBlock7, Mode=OneWay}"

 これで、6つのC1PropertyGridコントロールが同じ場所に重なって表示されていますが、最初のC1PropertyGridコントロール「C1PropertyGrid1」だけが表示され、あとの5つのC1PropertyGridコントロールは非表示になっています。

次のページ
GUIの作成 2

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7594 2014/01/27 18:10

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング