none
ScrollViewerの子要素にListBoxを追加した場合の、ListBoxのHeightについて RRS feed

  • 質問

  • TweetDeckや、Seesmicのマルチカラムの様なデザインを作成したいと考えています。

    http://www.tweetdeck.com/desktop/

    http://seesmic.com/seesmic_desktop/

    実現方法としては

    ScrollViewerにListBoxを横方向にn個追加して

    ListBoxは、ScrollViewerの横スクロールで表示させる。

    ListBoxのItemは、各ListBoxの縦スクロールで表示しようと考えています。

     

    ただ、ここで一つ問題が発生しました。

    ListBoxに縦スクロールバーが表示されるくらいのItemを追加しても、なぜか縦スクロールバーが表示されません。

    どうやらScrollViewerの中に入れてしまうと、自動でListBox内の要素が全て表示できる高さになってしまい

    Windowの高さを超えた場合は、超えた部分は見えなくなってしまいます。

    この状況でListBoxの縦スクロールバーを使用可能にする方法を教えて頂ければと思ってます。

    それか、代替案等でも良いのでよろしくお願いします。

     

    ※Yahoo!知恵袋でも同じ質問をしていましたが、使い勝手が悪かったのでクローズして、こちらで再度質問をしています。

    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1044793595


    以下、ソースです。

    ■Window1.xaml

    <Window x:Class="Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:src="clr-namespace:WpfApplication1"
    Title="Window1" Height="100" Width="230">
    <Grid>
    <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Visible">

    <StackPanel Orientation="Horizontal">

                    <StackPanel.Resources>

                        <Style x:Key="ListStyle" TargetType="{x:Type ListBox}">

                            <Setter Property="Height" Value="Auto"/>

                            <Setter Property="Width" Value="100"/>

                            <Setter Property="VerticalAlignment" Value="Stretch"/>

                            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>

                        </Style>

                    </StackPanel.Resources>

                    <ListBox Name="list1" Style="{StaticResource ListStyle}"/>

                    <ListBox Name="list2" Style="{StaticResource ListStyle}"/>

                    <ListBox Name="list3" Style="{StaticResource ListStyle}"/>

               </StackPanel>

    </ScrollViewer>

    </Grid>
    </Window>

    ■Window1.xaml.vb


    Imports System.Collections.ObjectModel

    Class Window1

    Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    Dim a1 As New ObservableCollection(Of String)
    Dim a2 As New ObservableCollection(Of String)
    Dim a3 As New ObservableCollection(Of String)

    a1.Add("list1")
    a1.Add("list1")
    a1.Add("list1")
    a1.Add("list1")
    a1.Add("list1")
    list1.ItemsSource = a1

    a2.Add("list2")
    a2.Add("list2")
    a2.Add("list2")
    a2.Add("list2")
    a2.Add("list2")
    list2.ItemsSource = a2

    a3.Add("list3")
    a3.Add("list3")
    a3.Add("list3")
    a3.Add("list3")
    a3.Add("list3")
    list3.ItemsSource = a3
    End Sub
    End Class

     

    2010年8月7日 19:08

回答

すべての返信