.NET TIPS

[WPF、Silverlight 2]リストボックス内でTextBlockコントロールの文字列を折り返すには?[XAML]

デジタルアドバンテージ 遠藤 孝信
2010/02/04

 テキストを表示するためのTextBlockコントロールでは、TextWrapping属性に「Wrap」を指定することにより、コントロールの幅に合わせてテキストを折り返して表示できる(既定値は「NoWrap」)。

 しかし、リストボックスの項目としてTextBlockコントロールを使用する場合、TextWrappingプロパティに「Wrap」を設定しても、折り返し表示されない(代わりにリストボックスに横スクロールバーが現れる)。

 以下は、その状態を示すためのWPFアプリケーションのサンプル・コード(XAMLコード)と、その実行画面である。

<Window x:Class="HScrollDisWPF.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window1" Height="300" Width="300">

  <Grid>
    <ListBox>

      <TextBlock TextWrapping="Wrap">
        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト
      </TextBlock>

      <TextBlock TextWrapping="Wrap">
        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト
      </TextBlock>

    </ListBox>
  </Grid>
</Window>
WPFアプリケーションのサンプル・コード(XAML)


上記サンプル・コードの実行画面
折り返し設定にもかかわらず、長いテキストは折り返されず、代わりにリストボックスに横スクロールバーが付く。

 これは、既定ではリストボックスが横スクロール可能(=横幅のサイズが無制限)であるため)、TextBlockコントロールでの折り返し表示が不要と判断されるためだ。

 このようなケースでテキストを折り返し表示するには、リストボックスで横スクロールバーの表示を禁止すればよい。これには、ScrollViewer.HorizontalScrollBarVisibility属性を「Disable」に設定すればよい(既定値は「Auto」)

 以下は、これを行った場合のWPFアプリケーションのサンプル・コード(XAMLコード)と、その実行画面である。

<Window x:Class="HScrollDisWPF.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window1" Height="300" Width="300">

  <Grid>
    <ListBox
      ScrollViewer.HorizontalScrollBarVisibility="Disabled">

      <TextBlock TextWrapping="Wrap">
        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト
      </TextBlock>

      <TextBlock TextWrapping="Wrap">
        長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト
      </TextBlock>

    </ListBox>
  </Grid>
</Window>
テキストを折り返し表示するサンプル・コード(XAML)


上記サンプル・コードの実行画面
長いテキストは折り返され、リストボックスには横スクロールバーが表示されない。

 以上はWPFアプリケーションのコードや画面で説明したが、Silverlightでもまったく同様の設定により、リストボックス内でのTextBlockコントロールの表示を折り返すことができる。End of Article

カテゴリ:WPF 処理対象:TextBlockコントロール
カテゴリ:Silverlight 2 処理対象:TextBlockコントロール
使用ライブラリ:TextBlockコントロール(System.Windows.Controls名前空間)
使用ライブラリ:ListBoxコントロール(System.Windows.Controls名前空間)

この記事と関連性の高い別の.NET TIPS
[WPF、Silverlight 2]リストボックスの幅全体に項目を表示するには?
[Silverlight 2]TextBlockコントロールに背景色を設定するには?
リストボックスの各項目に値をひも付けるには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • 配列のコピーを1行でするには? (2017/4/26)
     配列をコピーするには、for/foreachループを使う方法もあるが、ArrayクラスのCopyメソッドを使うのが一番簡単で速度の面でも有利である
  • Microsoft Small Basic (2017/4/25)
     Microsoft Small Basicは学習を目的としてマイクロソフトが提供しているBASICの処理系。シンプルな言語仕様、習得が容易、簡潔な記述がその特徴
  • 第2回 Visual Studio 2017の基礎を知る (2017/4/21)
     開発環境Visual Studio 2017を使ったプログラミングに不可欠な知識とは? ソリューションの概念から画面構成まで基礎を説明
  • XmlSerializerでシリアライズ/デシリアライズする (2017/4/19)
     XmlSerializerクラスでシリアライズ/デシリアライズを行うと、デシリアライズに失敗することがある。その回避策を含め、XmlSerializerクラスの使い方を説明する
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH