.NET Framework デベロッパー センター > .Net Framework フォーラム > Windows Presentation Foundation ( WPF ) > コントロールのグループをテンプレートのように表示させたい

回答済み コントロールのグループをテンプレートのように表示させたい

  • 2009年3月30日 13:27
     
     
    四角形の上にラベルを3つ配置したものを1つのグループにしそれをコード側から呼び出して表示したいと思っています。

    <Grid Width="200" Height="100">
                 <Rectangle Stroke="#FF000000" StrokeThickness="10" RadiusX="5" RadiusY="5" />
                 <Label Height="20" Content="a" Margin="24,16,26,0" VerticalAlignment="Top"/>
                 <Label Content="b" Margin="24,36,26,44"/>
                 <Label Height="20" Content="c" Margin="24,0,26,24" VerticalAlignment="Bottom"/>
    </Grid>

    こんな風にグループ化(この例ではGridにしましたが他にいいまとめ方があればご紹介いただければありがたいです)
    したものをコード側から呼び出して複数表示させたいと思います。
    これはリソースに記述して呼び出すといった方法が常套手段でしょうか?
    だとすればリソースにどのように記述すればよいか調べてみましたがよくわかりませんでした。
    また、全く別の方法もありますでしょうか?
    例えば全てコードで記述して表示させるとか。
    何か良い方法をご存知の方教えて頂ければ幸いです。

回答

  • 2009年4月2日 16:53
     
     回答済みコードあり
    DataTemplateを使うのはどうでしょうか?

    public class Foo {}

    のようなクラスを定義して、それに対応するDataTemplateをウィンドウやアプリケーションのResourcesに追加します。
    <DataTemplate DataType="{x:Type どこかで定義した名前空間:Foo}">
      <Grid Width="200" Height="100">
        ....省略....
      </Grid>
    </DataTemplate>
    後は、ContentControlやItemsTemplateにFooクラスのインスタンスを追加すれば、DataTemplateに
    定義した見た目で表示されます。
    かずき Blog:http://blogs.wankuma.com/kazuki/
    • 回答としてマーク無限極限2009年4月6日 14:52
    •  
  • 2009年4月3日 10:58
     
     回答済み
    WPF描画とそれを管理するクラスが必要なら UserControl を使ったらどうでしょうか?

    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2009/12
    • 回答としてマーク無限極限2009年4月6日 14:52
    •  
  • 2009年4月6日 3:48
     
     回答済みコードあり
    <Page xmlns:WpfBrowserApplication1="clr-namespace:WpfBrowserApplication1">
        :
    <Page.Resources>
    <DataTemplate DataType="{x:Type WpfBrowserApplication1:Foo}">
      <Grid Width="200" Height="100">
        :
      </Grid>
    </DataTemplate>
    </Page.Resources>
        :
    </Page>

    こんな感じですね。

    >ヒントはいただいたものの取っ掛かりが見つけられない状態です。
    プロジェクトを右クリックして、追加-新しい項目-WPF-ユーザーコントロールで追加できます。
    ユーザーコントロールに四角を追加します。
    xmlns を同様に追加して以下のように利用できます。

    <Page xmlns:WpfBrowserApplication1="clr-namespace:WpfBrowserApplication1">
        :
    <WpfBrowserApplication1:UserControl1 />
    </Page>

    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2009/12
    • 回答としてマーク無限極限2009年4月6日 14:52
    •  

すべての返信

  • 2009年4月2日 16:53
     
     回答済みコードあり
    DataTemplateを使うのはどうでしょうか?

    public class Foo {}

    のようなクラスを定義して、それに対応するDataTemplateをウィンドウやアプリケーションのResourcesに追加します。
    <DataTemplate DataType="{x:Type どこかで定義した名前空間:Foo}">
      <Grid Width="200" Height="100">
        ....省略....
      </Grid>
    </DataTemplate>
    後は、ContentControlやItemsTemplateにFooクラスのインスタンスを追加すれば、DataTemplateに
    定義した見た目で表示されます。
    かずき Blog:http://blogs.wankuma.com/kazuki/
    • 回答としてマーク無限極限2009年4月6日 14:52
    •  
  • 2009年4月3日 10:58
     
     回答済み
    WPF描画とそれを管理するクラスが必要なら UserControl を使ったらどうでしょうか?

    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2009/12
    • 回答としてマーク無限極限2009年4月6日 14:52
    •  
  • 2009年4月3日 23:40
     
     
    a_かずき_さん返信ありがとうございます。

    やってみたら、
    <DataTemplate DataType="{x:Type WpfBrowserApplication1:Person}">
    ここのところで
    型 'Person' が見つかりませんでした。
    となってしまいました。
    ちゃんと
    public class Person
        {
        }
    こういう風に記述しているのですが。何ででしょうか?

    えムナウさんへんしんありがとうございます。
    ヒントはいただいたものの取っ掛かりが見つけられない状態です。
  • 2009年4月4日 5:27
     
     

    clr-namespaceを書かれていますか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
  • 2009年4月4日 20:23
     
     
    trapemiyaさん返信ありがとうございます。

    clr-namespaceを調べてみましたが今回とどういった関係が有るのかいまいちつかめなかったです。

    xmlns:WpfBrowserApplication1="clr-namespace:WpfBrowserApplication1"

    これを頭につければいいのでしょうか?
    そうするとエラーが更に増えてしまいました。
  • 2009年4月6日 3:48
     
     回答済みコードあり
    <Page xmlns:WpfBrowserApplication1="clr-namespace:WpfBrowserApplication1">
        :
    <Page.Resources>
    <DataTemplate DataType="{x:Type WpfBrowserApplication1:Foo}">
      <Grid Width="200" Height="100">
        :
      </Grid>
    </DataTemplate>
    </Page.Resources>
        :
    </Page>

    こんな感じですね。

    >ヒントはいただいたものの取っ掛かりが見つけられない状態です。
    プロジェクトを右クリックして、追加-新しい項目-WPF-ユーザーコントロールで追加できます。
    ユーザーコントロールに四角を追加します。
    xmlns を同様に追加して以下のように利用できます。

    <Page xmlns:WpfBrowserApplication1="clr-namespace:WpfBrowserApplication1">
        :
    <WpfBrowserApplication1:UserControl1 />
    </Page>

    えムナウ@わんくま同盟 Microsoft MVP Visual Studio C# Since 2005/01-2009/12
    • 回答としてマーク無限極限2009年4月6日 14:52
    •  
  • 2009年4月6日 14:51
     
     
    えムナウさん返信ありがとうございます。

    DataTemplateはVCSEでやるとうまくできるのに
    Expression Blend 2で開こうとするとエラーになって表示できなかったりと
    よくわからない事になったのですが
    ユーザーコントロールでうまくできました。
    ありがとうございます。