2014-10-23 4 views
0

저는 WPF 전문가가 아니므로 부적절한 용어 사용을 용서해주십시오. 캡처 된 이미지를 표시 할 ScrollViewer가 있습니다. 그리고 슬라이더를 사용하여 이미지를 확대/축소합니다. 확대/축소는 정상적으로 작동하지만 스크롤 막대는 크기를 변경하지 않습니다. 따라서 이미지가 경계를 넘어 서면 스크롤하고 볼 수 없습니다. 스크롤 바는 크기를 변경하지 않았기 때문에 쓸모 없게됩니다.WPF ScrollViewer 스크롤 막대의 크기가 변하지 않습니다.

슬라이더 : XAML의

<Slider DockPanel.Dock="Right" Width="100" VerticalAlignment="Center" Minimum="0.2" Maximum="5" 
Interval="1" Value="{Binding ScaleFactor}"/> 

나머지 :

<Border BorderThickness="1" BorderBrush="Black" Grid.Row="1"> 
    <Grid> 
     <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
     CanContentScroll="True"> 
      <ItemsControl ItemsSource="{Binding ItemCollection}" Margin="0" 
      Width="{Binding Root.Boundary.Width}" Height="{Binding Root.Boundary.Height}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <Canvas> 
         <Canvas.LayoutTransform> 
          <ScaleTransform ScaleX="{Binding ScaleFactor}" 
          ScaleY="{Binding ScaleFactor}"CenterX="0" CenterY="0"/> 
         </Canvas.LayoutTransform> 
         </Canvas> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 


       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Grid> 
          <Image x:Name="capturedImage" 
            Source="{Binding Image}" 
            Width="{Binding Boundary.Width}" 
            Height="{Binding Boundary.Height}"/> 
           <Path x:Name="captureContour" 
            Data="{Binding Outline}" 
            Stroke="Black" StrokeThickness="4" Opacity="0.5" 
            StrokeLineJoin="Round"> 
           <Path.LayoutTransform> 
            <ScaleTransform ScaleX="{Binding OutlineScale.X}" 
            ScaleY="{Binding OutlineScale.Y}" CenterX="0"CenterY="0"/> 
           </Path.LayoutTransform> 
           </Path> 
          </Grid> 
          <DataTemplate.Triggers> 
           <Trigger SourceName="capturedImage" Property="IsMouseOver" 
           Value="True"> 
           <Setter TargetName="captureContour" Property="Stroke" 
            Value="Blue"/> 
           <Setter TargetName="captureContour" Property="BitmapEffect"> 
            <Setter.Value> 
             <DropShadowBitmapEffect/> 
             </Setter.Value> 
            </Setter> 
           </Trigger> 
          </DataTemplate.Triggers> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
      </ScrollViewer> 
     </Grid> 
    </Border> 
+0

문제가 인해'Canvas' 패널 사용에 보인다. 'Canvas'는 자식의 크기에 따라 확장되거나 붕괴되지 않기 때문입니다. 샘플을 게시 할 수 있습니까? 좀 봐도 될까요? 대답에 대해 – pushpraj

답변

0

OK들, 여기 그것이 작동되도록하기 위해 수행해야 할 것입니다 :

<ItemsControl ItemsSource="{Binding ItemCollection}" Margin="0" Width="{Binding CanvasWidth}" 
       Height="{Binding CanvasHeight}"/> 
0

문제는 ItemsPanel로 사용 Canvas로 인해 여기 내 XAML입니다. Canvas는 크기가 확장되거나 축소되지 않으므로 ScrollViewer가 변경 사항을 감지하지 못합니다.

빠른 해결책으로 ItemsPanelGrid으로 변경하십시오. 예에서 캔버스 속성 (예 : Canvas.Left or Canvas.Top)을 사용하지 않는 것 같으므로이 변경으로 인해 모양이 달라지지 않을 수 있습니다.

예를

<ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid HorizontalAlignment="Left" VerticalAlignment="Top"> 
       <Grid.LayoutTransform> 
        <ScaleTransform ScaleX="{Binding ScaleFactor}" 
            ScaleY="{Binding ScaleFactor}" 
            CenterX="0" 
            CenterY="0" /> 
       </Grid.LayoutTransform> 
      </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

이 확대되면, 그렇지 않으면 이상한 나타날 수 있습니다 그리드의 HorizontalAlignment="Left" VerticalAlignment="Top"을 가지고 있는지 확인하십시오.

시도해보고 이것이 원하는 것인지 확인하십시오.

+0

주셔서 감사합니다. 하지만 작동하지 않습니다. 확대도 가능하지만 스크롤 막대는 영향을받지 않습니다. – armanali

관련 문제