質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • C#

    7745questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    2009questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • Windows

    1544questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • WPF

    740questions

    Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

  • XAML

    262questions

    XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

[WPF、XAML]リストボックスの1つ目のアイテムに特定のデザインを適用する

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 269

yyokii

score 25

 前提

・C#
・Visual Studio 2017
・WPFアプリ

 やりたいこと

リストボックスを使用する際に、アイテムの1つ目に特定のものを使用したいです。
イメージは下図のようなものです  

イメージ図

例えば、
・1つ目のアイテムはユーザーの情報(名前、詳細プロフィール情報)
・2つ目以降のアイテムはユーザーがお気に入り登録した情報を表示
のような目的で使用したいと思っています。

また、「コンテンツ全体をスクロール」させたいと思っています
→ 下部のアイテム(この場合お気に入りアイテム)のところだけをリストボックスにする(コンポーネントを分ける)というパターンも考えられますが、要望としては全体をスクロールさせたいです。。
もし分けるような方針にした場合、デザイン上リストボックスの高さを十分に確保できず、1度に見られるアイテム数が少なくなりよろしくないです。そこでリストボックス内にプロフィール要素も格納することでリストボックスの高さを確保し、スクロールした際に1度に見られるアイテム数を増やしたいなぁ、と思った次第です。

(できていること)
・リストボックスにデータテンプレートを設定、データコンテキストにリストを渡してリストボックスに表示するのは実装できています。

リストボックスにおいて、特定(この場合は1つ目)のアイテムにだけ固有のスタイル?デザイン?を適用することはできますでしょうか?
できるとしたらどのように実装していくのが良いのか、もしご存知でしたらアドバイス等頂けると幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ebiryo

    2018/05/14 13:02

    構成が良くわからないので何とも言えないのですが、「2つ目以降はデータコンテキストとしてListを渡し云々」とありますが、一つ目もデータコンテキストに設定しているListのゼロ番目の要素なんですよね?Listということは同じ型の要素は格納されているという認識であっていますか?

    キャンセル

  • yyokii

    2018/05/14 14:15

    >一つ目もデータコンテキストに設定しているListのゼロ番目の要素なんですよね? すみません、この思考抜け落ちていました。確かにデータコンテキストととしてListを渡している以上1つ目もListの0番目の要素になりますね。その認識で問題ないです。

    キャンセル

回答 3

checkベストアンサー

+3

リストボックスの中に違うコンテンツを入れるのではなく、プロフィールとお気に入りは分けたほうが筋が良いです。

<Border>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <ContentControl Name="UserProfile"/>
        <ListBox Name="Favorites"/>
    </Grid>
</Border>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/14 14:25

    いつも回答ありがとうございます!
    すみません、自分の説明で不十分なところがありましたので、追記させていただきました。確認いただけると嬉しいです。

    具体的には以下の部分です。

    また、「コンテンツ全体をスクロール」させたいと思っています
    → 下部のアイテム(この場合お気に入りアイテム)のところだけをリストボックスにする(コンポーネントを分ける)というパターンも考えられますが、要望としては全体をスクロールさせたいです。。
    もし分けるような方針にした場合、デザイン上リストボックスの高さを十分に確保できず、1度に見られるアイテム数が少なくなりよろしくないです。そこでリストボックス内にプロフィール要素も格納することでリストボックスの高さを確保し、スクロールした際に1度に見られるアイテム数を増やしたいなぁ、と思った次第です。

    キャンセル

  • 2018/05/14 15:42

    どんな場合であっても違うものを一緒くたに入れることはお勧めできません。
    全体をScrollViewerに入れるとか、ListBoxのScrollViewer.ScrollChangedイベントを拾って一番上じゃなかったらプロフィール部分を非表示にするとか幾らでもやり方はあると思います。

    キャンセル

+1

DataTemplateSelector を使ってこれから表示しようとするデータの位置に応じてテンプレートを返してあげればよいのでは? 
DataTemplateSelector で検索すれば色々情報があるかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

ListBox に含めるべきでは無いと言う意見には私も賛成です。

ListBox にこだわらない(要素の選択不要、仮想化不要)なら、HeaderedItemsControl を ScrollViewer で囲む手があります。

あるいは、CollectionViewSource を使って ListBox の要素をグループ化し、 GroupStyle を変更してヘッダー部分を固定情報にするなど。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    7745questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Visual Studio

    2009questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • Windows

    1544questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • WPF

    740questions

    Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

  • XAML

    262questions

    XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。