2016-05-06 23 views
0

値を挿入できるセルがあるテーブルがあります。テーブルは、データに基づいて動的に生成されます。テーブルサイズはグリッドによって制限されています。データが多すぎると、水平スクロールバーが表示されます。WPF - ScrollViewerが開始位置に戻ります

これはScrollViewerのItemsControlで実装されています。

<ScrollViewer 
    VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Auto"> 
    <ItemsControl ItemsSource="{Binding Data}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Border> 
        <ItemsControl ItemsSource="{Binding Value}"> 
         <ItemsControl.ItemsPanel> 
          <ItemsPanelTemplate> 
           <StackPanel/> 
          </ItemsPanelTemplate> 
         </ItemsControl.ItemsPanel> 
         <ItemsControl.ItemTemplate> 
          <DataTemplate> 
           <Grid> 
            <Grid.RowDefinitions> 
             <RowDefinition SharedSizeGroup="SomeCellRowSize"/> 
            </Grid.RowDefinitions> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition SharedSizeGroup="SomeCellRowSize"/> 
            </Grid.ColumnDefinitions> 
            <TextBox 
             Text="{Binding Value.TotalTime}" 
             HorizontalContentAlignment="Right" BorderThickness="0" Margin="1,1,0,0"/> 
           </Grid> 
          </DataTemplate> 
         </ItemsControl.ItemTemplate> 
        </ItemsControl> 
       </Border> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</ScrollViewer> 

テーブルを右にスクロールしていくつかのセル(テキストボックス)を選択すると問題が発生します。これを行うと、ScrollViewerは一番左の位置に戻ります。

答えて

3

ScrollViewerを包むよりも、がItemsPanelの内部に組み込まれている方が良いです。私の経験から、より多くの問題がある傾向があります。 TemplateScrollViewerに変更してください。

<ItemsControl ItemsSource="{Binding Data}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.Template> 
     <ControlTemplate> 
      <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"> 
       <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"/> 
      </ScrollViewer> 
     </ControlTemplate> 
    </ItemsControl.Template> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Border> 
       <ItemsControl ItemsSource="{Binding Value}"> 
        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
          <StackPanel/> 
         </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <Grid> 
           <Grid.RowDefinitions> 
            <RowDefinition SharedSizeGroup="SomeCellRowSize"/> 
           </Grid.RowDefinitions> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition SharedSizeGroup="SomeCellRowSize"/> 
           </Grid.ColumnDefinitions> 
           <TextBox 
            Text="{Binding Value.TotalTime}" 
            HorizontalContentAlignment="Right" BorderThickness="0" Margin="1,1,0,0"/> 
          </Grid> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
      </Border> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
関連する問題