Aquí podría ser tu PUBLICIDAD


Ampliación de imagen de WPF

votos
5

Tengo una Viewbox con una imagen dentro de ella. Esto es genial ya que Viewbox escalará la Imagen para que se ajuste a la ventana. Sin embargo, necesito poder acercar la imagen a su tamaño completo y mostrar barras de desplazamiento, y me está costando trabajo encontrar la manera de hacerlo.

Esto es lo que tengo ahora. ¿Alguien puede dar algunos consejos sobre cómo puedo modificar esto para implementar la funcionalidad anterior?

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

Editar: solo para aclarar. Necesito las dos formas de ver la imagen, el estilo de la ventana de vista de ajustar la ventana Y la capacidad de alternar a una vista de Tamaño real que muestra las barras de desplazamiento y no cambia el tamaño de la imagen.

Publicado el 12/03/2009 a las 17:40
fuente por usuario joshuapoehls
En otros idiomas...        العربية       

4 respuestas

votos
11

No es necesario un Viewboxaquí, poniendo la Imageen una ScrollViewery la manipulación de los VerticalScrollBarVisibilityy las HorizontalScrollBarVisibilitypropiedades, puede hacer que la Imageescala o no:

<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>
Respondida el 12/03/2009 a las 06:54
fuente por usuario Robert Macnee


Aquí podría ser tu PUBLICIDAD


votos
4
<ScrollViewer HorizontalScrollBarVisibility="Auto">
    <Viewbox>
        <Image Source="ranch.jpg"/>
    </Viewbox>
</ScrollViewer>
Respondida el 12/03/2009 a las 06:00
fuente por usuario Kent Boogaart

votos
1

En función de su edición, debe alternar los dos enfoques, lo haría de dos maneras.

  1. Tener dos elementos con la imagen. El elemento Image dentro de ScrollViewer sin Viewbox le dará la imagen de tamaño completo, y la versión de Viewbox lo escalará. Luego puedes alternar entre los dos dependiendo de lo que quieras mostrar.

  2. Use una expresión de enlace en las propiedades de Altura y Ancho de la Imagen y enciérrela dentro del scrollviewer. Cuando desee escalarlo (en algún tipo de desencadenador), establezca la altura en una expresión de enlace que acceda a la propiedad ActualHeight del ScrollViewer o cualquier contenedor que esté justo encima (utilizando RelativeSource para acceder al antecesor más cercano, como el siguiente):

    {Binding Path=ActualHeight, 
             RelativeSource={RelativeSource AncestorType={x:Type ScrollViewer}}}
    
Respondida el 12/03/2009 a las 06:44
fuente por usuario Rich

votos
0

Pensé que iba a publicar mi solución para cualquiera que quiera.

                <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>
Respondida el 06/05/2015 a las 01:52
fuente por usuario Jonah Kunz