34

私はデータバインドされ、アイテムテンプレート化されたリストボックスを持っています:

<ListBox x:Name="lbLista" 
         ScrollViewer.VerticalScrollBarVisibility="Visible">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <StackPanel Orientation="Horizontal">
          <CheckBox IsChecked="{Binding Deleteable, Mode=TwoWay}" />
          <Label Content="{Binding Name}" />
        </StackPanel>
      </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

アイテムは正常に表示され、ObservableCollection から取得されます。

問題は、表示されるが使用できないスクロールバーです。つかむハンドルがありません。ListBox にいくつかの ScrollView 添付プロパティを設定しようとしましたが、状況には影響しません。

4

4 に答える 4

31

あなたのコードをテスト プロジェクトに貼り付け、約 20 個の項目を追加したところ、使用可能なスクロール バーが表示され、問題なく動作しました。いくつかのアイテムを追加するだけで(スクロールが不要になるなど)、使用可能なスクロールバーが表示されません。これは事実でしょうか?十分なアイテムを追加していませんか?

を削除すると、ScrollViewer.VerticalScrollBarVisibility="Visible"必要な場合にのみスクロール バーが表示されます。

于 2009-01-27T14:32:50.653 に答える
10

ListBoxは、使用可能な高さを拡張しようとします。ListBoxのHeightプロパティを設定すると、実際に機能するスクロールビューアが表示されます...

ListBoxで使用可能な高さに対応したい場合は、親コントロールから高さを調整してみてください。たとえば、グリッドでは、RowDefinitionで高さをAutoに設定するとうまくいく場合があります...

HTH

于 2009-01-27T14:40:10.500 に答える
5

スタックパネル内に配置されたスクロール可能なコンテンツ(ScrollableContainerから派生したもの)で運がなかったことがありません。スタックパネルには、測定操作が完了すると子コントロールを混乱させる奇妙なレイアウトメカニズムがあり、垂直サイズが無限になることがわかりました。したがって、制限されていません- コンテナの境界を越えてしまい、クリップされてしまう. スクロールバーが表示されないのは、コントロールがワールド内のすべてのスペースを持っていると認識していないのに、それがワールド内のすべてのスペースを持っていると判断するためです.

スクロールバーのサイズが適切になるように、実行時のレイアウト操作中に既知の高さに解決できるコンテナー内にスクロール可能なコンテンツを常に配置する必要があります。ビジュアル ツリーの上位にある親コンテナーは、実際の高さに解決できる必要があります。これは、RowDefinition の高さを auto または fixed に設定すると、グリッドで発生します。

これは Silverlight でも発生します。

-em-

于 2012-04-28T21:27:01.073 に答える
0

答えてくれてありがとう。私も空のプロジェクトに自分で試してみましたが、天国と7つの海の全能の創造者を見よ-それはうまくいきました. 私はもともと root の中にある ListBox を持っていました。何らかの理由で、ListBox は StackPanel 内にあることをまったく好みません! =)

-ポン-

于 2009-01-27T14:50:14.363 に答える