2016-12-06 5 views
1

Я использую Scrollviewer с элементом управления в нем. VerticalScrollBarVisibility для Scrollviewer настроен на «Авто». проблема заключается в том, что при появлении полосы прокрутки она перемещает содержимое элемента ItemsControl горизонтально.вертикальная полоса прокрутки сдвигает содержимое по горизонтали

Есть ли способ, которым полоса прокрутки будет просто «над» содержимым, не перемещая их?

код выглядит примерно так

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True" SnapsToDevicePixels="True"> 
    <ItemsControl ItemsSource="{Binding Summaries}" > 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Vertical" IsItemsHost="True" CanVerticallyScroll="True" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="15,5,10,5" HorizontalAlignment="Stretch"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width=".166*"></ColumnDefinition> 
        <ColumnDefinition Width=".166*"></ColumnDefinition> 
        <ColumnDefinition Width=".166*"></ColumnDefinition> 
        <ColumnDefinition Width=".166*"></ColumnDefinition> 
        <ColumnDefinition Width=".166*"></ColumnDefinition> 
        <ColumnDefinition Width=".166*"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <Label Grid.Column="0" Content="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left"/> 
       <Label Grid.Column="1" Content="{Binding A}" HorizontalContentAlignment="Center"/> 
       <Label Grid.Column="2" Content="{Binding B}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
       <Label Grid.Column="3" Content="{Binding C}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
       <Label Grid.Column="4" Content="{Binding D}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
       <Label Grid.Column="5" Content="{Binding E}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
      </Grid> 
     </DataTemplate>            
    </ItemsControl.ItemTemplate> 
</ItemsControl></ScrollViewer> 

Благодарности

ответ

1

Вот трюк, я использовал в последнее время в моем проекте:

ItemsControl.Width получают из ScrollViewer.ActualWidth через OneWay связывания:

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True" 
       Name="scroller" 
       SnapsToDevicePixels="True"> 
    <ItemsControl ItemsSource="{Binding Summaries}" 
        Width="{Binding Path=ActualWidth, ElementName=scroller, Mode=OneWay}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical" IsItemsHost="True" CanVerticallyScroll="True" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <UniformGrid Columns="6" Margin="15,5,10,5" HorizontalAlignment="Stretch"> 
        <Label Content="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left"/> 
        <Label Content="{Binding A}" HorizontalContentAlignment="Center"/> 
        <Label Content="{Binding B}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
        <Label Content="{Binding C}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
        <Label Content="{Binding D}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
        <Label Content="{Binding E}" HorizontalAlignment="Center" HorizontalContentAlignment="Stretch"/> 
       </UniformGrid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</ScrollViewer> 

также рассмотреть возможность использования UniformGrid

Смежные вопросы