2009-08-12 18 views
10

私はListBoxにWPFコントロールのリストを表示しています。 私の問題は、垂直スクロールバーは表示されますが、ListBoxがスクロール可能な項目が十分であっても無効になります。 もう1つのおそらく関連する事実は、これがIntegration.ElementHostに含まれているということです。リストボックス内のスクロールバーが機能しない

ここでWPFのnoobie、ジム・

は、XAMLがListBoxのためである:

// for brevity I removed the Margin and Tooltip attributes 

    <Grid x:Class="Xyzzy.NoteListDisplay" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel Name="stackPanel" Orientation="Vertical" 
       ScrollViewer.VerticalScrollBarVisibility="Visible"> 
     <StackPanel Orientation="Horizontal"> 
      <CheckBox Name="AllRecent" IsChecked="False" >View All Recent</CheckBox> 
      <CheckBox Name="AscendingOrder" IsChecked="False">Descending Order</CheckBox> 
      <Button Name="btnTextCopy" Click="btnCopyText_Click">Copy All</Button> 
     </StackPanel> 
     <ListBox Name="NoteList" 
       ScrollViewer.CanContentScroll="True" 
       ScrollViewer.VerticalScrollBarVisibility="Visible"> 
     </ListBox> 
     </StackPanel> 
    </Grid> 

そして、それぞれのListBox項目に表示されるコントロールのためのXAML:

<UserControl x:Class="Xyzzy.NoteDisplay" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <StackPanel Orientation="Vertical"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Name="Heading" FontSize="10">Note Heading</TextBlock> 
      <Button Name="btnCopyText" Height="20" FontSize="12" 
          Click="btnCopyText_Click">Copy 
      </Button> 
     </StackPanel> 
     <TextBlock Name="Body" FontSize="14">Note Body</TextBlock> 
     </StackPanel> 
    </Grid> 
    </UserControl> 

答えて

23

StackPanelを使用すると、スクロールバーの視認性に問題がありました。 StackPanelは常にすべての子を含む必要があるため、それが大きいと思います。 StackPanel(代わりにGridを使用してください)を削除するレイアウトを再構成して、役立つかどうか確認してください。

+0

StackPanelではなくListboxをGridに配置すると、問題は解消されます。 これはWPFコードのバグ、WPFデザインのバグ、または意図的なWPFの動作ですか? –

+0

私はそれがStackPanelの仕組みだと思います。あなたのケースでは、StackPanelは、ListBoxがスクロールせずに必要とするほどの高さでしたが、StackPanelは下部に「切り捨て」されていました。 –

+0

はい、問題はStackPanelにあり、問題はGridによって解決されます。ありがとう@JohnMyczek –

2

へや、私は疑います何が起こっているかもしれないが、ListBoxがすべての項目に対して十分に拡張していますが、ListBoxは実際には含有制御。

ListBoxは実際に正しく停止していますか、消えてしまったようですか? ListBoxでMaxHeightを設定し、スクロールバーが表示されるかどうかを確認してください。 VerticalScrollBarVisibilityをAutoに設定して、必要なときにのみ表示されるようにする必要があります。

+0

私は、リストボックスのサイズをあなたの提案どおりに制限しようとしたことを言及しておきます。結果は改善されなかった。 –

0

この問題を解決するもう1つの解決策は、をStackPanelのまわりに置くことです。

2

リストボックスがStackPanelの内側にある場合は、あなたがすることを期待いくつかの高さにListBoxコントロールのHeightプロパティを設定し、あなたのListBox

  1. 設定ScrollViewer.VerticalScrollBarVisibility =「オート」
  2. ための手順を実行してみてください見る。

スクロールバーが表示されます。

1

これはかなり遅いですが、リストボックスを使用している人なら誰でもStackPanelに入れてはいけません。 ListBoxの親コントロールをStackPanelからLastChildFill = True(リストボックスが最後のコントロールであったところ)でDockPanelに切り替えた後、私のスクロールバーは完全に機能しました。

これは、問題の誰かが上記の答えによって解決されなかったのを助けると思っています。

0

Daveを変更した別の解決策は、ScrollViewerのみを使用することです。 ScrollViewのScrollBarにマウスを置くだけで、スクロールすることができます。私はListBoxがアイテム間でどのようにジャンプするのか、またTopからアイテムが欠けているのが好きではないので、この方法で使用します。少しでもハードな目に。私はScrollViewerの円滑なスクロールが好きです。

+0

マウスがListBox上にあるときにスクロールを追加するには、このポストを読んでください。 http://stackoverflow.com/questions/2976240/how-can-make-scrollviewer-scroll-when-mouse-is-over-any-content?rq=1 – VcDeveloper

0

私はちょうど同じ問題に遭遇しました。ここでは視覚的にそれを示すコードプロジェクトの少しのコードデモがあります。

(あなたが自分自身:)違いを自分で見るためにコードを書く時間を節約したい場合)

http://www.codeproject.com/Tips/659066/ListBox-and-Panels-in-WPF

4

あなただけHeightプロパティを導入する必要があり、このような:

<ListBox Height="200" 
     Name="NoteList" 
     ScrollViewer.CanContentScroll="True" 
     ScrollViewer.VerticalScrollBarVisibility="Visible"> 
</ListBox> 
関連する問題