2009-03-12 62 views
5

Tôi có một hộp xem có hình ảnh bên trong nó. Điều này là rất tốt vì Viewbox sẽ mở rộng Hình ảnh để vừa với cửa sổ. Tuy nhiên, tôi cần có khả năng phóng to hình ảnh về kích thước đầy đủ và hiển thị thanh cuộn và tôi đang gặp khó khăn trong việc tìm ra cách thực hiện điều này.Phóng to hình ảnh WPF

Đây là những gì tôi có ngay bây giờ. Bất cứ ai có thể đưa ra một số gợi ý về cách tôi có thể sửa đổi điều này để thực hiện các chức năng trên?

<Viewbox x:Name="viewbox"> 
    <StackPanel> 
     <Image x:Name="image" Source="ranch.jpg" /> 
    </StackPanel> 
</Viewbox> 

Chỉnh sửa: Chỉ cần làm rõ. Tôi cần cả hai cách xem hình ảnh, kiểu khung nhìn của việc lắp cửa sổ VÀ khả năng chuyển sang chế độ xem Kích thước thực tế hiển thị thanh cuộn và không thay đổi kích thước hình ảnh.

Trả lời

11

bạn không cần một Viewbox đây, bằng cách đặt Image trong một ScrollViewer và thao tác VerticalScrollBarVisibilityHorizontalScrollBarVisibility tính, bạn có thể làm cho Image quy mô hay không:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 
    <CheckBox x:Name="chkActualSize" Grid.Row="0" Content="Actual Size"/> 
    <ScrollViewer Grid.Row="1"> 
     <ScrollViewer.Style> 
      <Style TargetType="{x:Type ScrollViewer}"> 
       <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> 
       <Setter Property="VerticalScrollBarVisibility" Value="Disabled"/> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsChecked, ElementName=chkActualSize}" Value="True"> 
         <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/> 
         <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ScrollViewer.Style> 
     <Image Source="http://sipi.usc.edu/database/misc/4.1.01.tiff" VerticalAlignment="Center" HorizontalAlignment="Center"/> 
    </ScrollViewer> 
</Grid> 
+0

+1 Tôi tin rằng đây là câu trả lời đúng. – Bill

4
<ScrollViewer HorizontalScrollBarVisibility="Auto"> 
    <Viewbox> 
     <Image Source="ranch.jpg"/> 
    </Viewbox> 
</ScrollViewer> 
+0

Điều này không giải quyết được sự cố của tôi. Thậm chí được bọc trong ScrollViewer, Viewbox vẫn cân chỉnh Hình ảnh để vừa với kích thước của cửa sổ. – joshuapoehls

+0

Sau đó, bạn phải đặt thuộc tính Stretch theo cách thủ công trong mã phía sau. Đừng. Chỉ cần lấy XAML của tôi và sử dụng nó như là. Nó hoạt động - Tôi đã thử. –

1

Dựa trên chỉnh sửa của bạn mà bạn cần phải chuyển đổi hai cách tiếp cận, tôi sẽ thực hiện việc này theo một trong hai cách.

  1. Có hai thành phần với hình ảnh. Phần tử Hình ảnh bên trong một ScrollViewer mà không có Hộp xem sẽ cung cấp cho bạn hình ảnh có kích thước đầy đủ và phiên bản Viewbox sẽ mở rộng nó. Sau đó, bạn có thể chuyển đổi hai tùy thuộc vào những gì bạn muốn hiển thị.

  2. Sử dụng biểu thức ràng buộc trên thuộc tính Chiều cao và Chiều rộng của Hình ảnh và đính kèm nó trong trình xem ảnh. Khi bạn muốn mở rộng nó (trong một số loại trigger), thiết lập Height thành một biểu thức ràng buộc truy cập thuộc tính ActualHeight của ScrollViewer hoặc bất cứ vùng chứa nào ở trên (sử dụng RelativeSource để truy cập tổ tiên gần nhất như sau):

    {Binding Path=ActualHeight, 
         RelativeSource={RelativeSource AncestorType={x:Type ScrollViewer}}} 
    
+0

Hộp nhìn không nhất thiết phải mở rộng. Nó có thuộc tính Stretch để xác định làm thế nào - nếu ở tất cả - nó tăng tỷ lệ nội dung của nó. –

0

Nghĩ rằng tôi sẽ đăng giải pháp của mình cho bất kỳ ai đang tìm kiếm.

   <Slider Width="200" Value="500" Interval="25" Maximum="1000" x:Name="TestImageSlider" Minimum="-50" /> 
      <ScrollViewer Grid.Row="1" HorizontalScrollBarVisibility="Auto"> 
       <Image Source="{Binding SelectedScannedImage.ScannedImage}" Width="{Binding Path=Value, ElementName=TestImageSlider}" /> 
      </ScrollViewer> 
Các vấn đề liên quan