2017-01-10 2 views
3

単一のアイテムがリストボックスのサイズより大きい場合、ListBoxスクロールバーを動作させるにはどうすればよいですか?WPFリストボックスは、1つのアイテムがコントロールの高さを超えた場合にコンテンツを表示できません。

私はカスタムItemTemplateを持つListBoxを持っています。テンプレートには、メモを取るためのメッセージとタイムスタンプが表示されます。問題は、オペレータが本当に長いメモを作成し、ListBoxのスクロールバーが表示されず、上下にスクロールしてメモ全体を表示できない場合です。このコントロールは、いくつかの小さな音符に対して完璧に機能します。大きな音符の後に小さな音符を追加すると、スクロールバーが表示され、スクロールダウンできますが、最初の音符全体が表示されず、スクロールしたときに次の音符にスナップされます。

<ListBox Grid.Row="1" ItemsSource="{Binding Notes}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Border Margin="1" Padding="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="3"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition /> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto" /> 
          </Grid.RowDefinitions> 

          <TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding CreatedDateTime, StringFormat={}{0:h:mm:ss tt}}" Margin="0,0,20,0"/> 
          <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Note}" TextWrapping="Wrap" FontSize="20"/> 

         </Grid> 
        </Border> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

写真を説明するのに役立つ画像。

enter image description here enter image description here

+0

次の項目にスクロールすることはできますが、特大の項目内をスクロールすることはできません。 –

+1

垂直スクロールバーを無効にしてから、リストボックス全体をScrollViewerに配置することもできます。 – Clemens

+0

(Ed Plunkett)正しい。特大のアイテム内をスクロールできません。 (Clemens 23)。これは視覚的に機能します。しかし、私はスクロールバー上にホバーしていない限り、タッチスクリーン/マウスホイールを使って上下にスクロールできません。リストボックスはスクロールイベントをキャプチャしていて、ScrollViewerコンテナにそれらを伝播していないと思います。 –

答えて

1

私は、ScrollViewerのを試してみましたが、それは余分な問題を引き起こしてしまいました。スクロールイベントやタッチイベントなどをルーティングする必要がありました。

最後に、設定する簡単なプロパティが見つかりました。 ListBoxで 'ScrollViewer.CanContentScroll = "False"を設定します。

これはスクロール動作を変更し、コンテンツはもはや切断されなくなりました。すべてのイベントも機能します。

これはなぜ機能するのか分かりませんが、ListBoxと関係していると思いますし、項目を画面から外してパフォーマンスを最適化しようとしています。私はこれがパフォーマンスの向上を無効にすると思うが、今は各項目のスペースをレンダリングしているので、スクロールの作業を行う。

関連する問題