2017-02-21 18 views
-1

My View отображает изображение как первый слой, чем я отображаю кучу фигур (прямоугольники, линии, круги) поверх изображения в качестве второго слоя. Изображение имеет скроллер, потому что он не может быть полностью отображен на моем представлении. Странная проблема заключается в том, что фигуры отображаются над скроллером. Как я могу это исправить?Прокрутка изображения: фигуры рисунка покрывают скроллер - как его исправить?

Вот мой Вид:

<Grid > 
     <Grid.RowDefinitions> 
      <RowDefinition Height="500" /> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="500" /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

     <ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible"> 
      <Image Source="{Binding VM.ManipulatedImage}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch" 
      Stretch="None"   
      Width="Auto" Height="Auto"/> 

     </ScrollViewer> 


     <ItemsControl 
      ItemsSource="{Binding VM.Shapes, Mode=TwoWay}" 
      Grid.Row="0" Grid.Column="0"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Canvas/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Path Data="{Binding Geometry}" 
          Fill="{Binding Fill}" 
          Stroke="{Binding Stroke}" 
          StrokeThickness="{Binding StrokeThickness}" 
          Opacity="{Binding Opacity}" 
           /> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

    </Grid> 
+0

Это совсем не странно. Элемент ItemsControl не является дочерним элементом ScrollViewer. Вместо этого оба являются дочерними элементами сетки верхнего уровня в одной и той же ячейке, а элемент ItemsControl находится поверх ScrollViewer. – Clemens

+0

Как я могу это исправить? Если я помещаю элементы управления в прокрутку, это говорит - не pssible. Если я размещаю элементы управления перед изображением, он не отображает его. –

+0

@ J.Doe вы нашли решение? – Richardissimo

ответ

1

Поместите ScrollViewer вокруг сетки. Сетка счастлива иметь нескольких детей.

<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible"> 
    <Grid > 
    <Grid.RowDefinitions> 
     <RowDefinition Height="500" /> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="500" /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 

     <Image Source="{Binding VM.ManipulatedImage}" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     Stretch="None"   
     Width="Auto" Height="Auto"/> 
    <ItemsControl 
     ItemsSource="{Binding VM.Shapes, Mode=TwoWay}" 
     Grid.Row="0" Grid.Column="0"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <Canvas/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Path Data="{Binding Geometry}" 
         Fill="{Binding Fill}" 
         Stroke="{Binding Stroke}" 
         StrokeThickness="{Binding StrokeThickness}" 
         Opacity="{Binding Opacity}" 
          /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

</Grid> 
</ScrollViewer> 
+0

Если я делаю это так, как вы предлагали, скроллер отключен и не работает –

+0

Мне трудно понять, что вам нужно, поскольку у меня нет изображения или коллекции предметов, которые вы связываете с , или скриншот того, что вы видите. Вы говорите, что «скроллер отключен и не работает», но поскольку нет ничего, что сделает его отключенным, я интерпретирую это как означающее, что панель прокрутки * включена *, но прокручивать ее некуда, а это значит, что она думает, что он показывает все, что нужно. Я предполагаю, что окно/элемент управления, на который вы смотрите, в> 500x500 - попробуйте сделать это меньше, полосы прокрутки будут работать (если только что-то не существует). – Richardissimo

+0

P.S. (несвязанный, но я подумал, что это может быть полезной общей точкой обучения для привязок WPF). Связывание с ItemsSource не обязательно должно быть TwoWay, так как свойство ItemsSource элемента ItemsControl не будет обновлять эту коллекцию. – Richardissimo