7
votes

Image étirée et centrée?

J'ai le code XAML suivant: xxx pré>

et i, visuellement, obtenez ceci: p>

 Entrez la description de l'image ici p>

( http://img810.imageshack.us/img810/2401/imagetretchunifiform.png ) p>

avec stretch =" Aucun " code>, j'ai eu ceci : p>

Entrez la description de l'image ici p>

( http://img28.imageshack.us/img28/1783/imagetretchnone.png ) P>

Maintenant, ce que je veux, c'est de centrer l'image verticalement ou horizontalement avec stretch = "uniforme" code>! Seul le "plus petit" côté (avec uniforme code>) sera centré, à droite. Mais pour le moment, comme vous pouvez le constater sur des captures d'écran, l'image est simplement placée dans le coin supérieur gauche, même si j'ai défini horizontalalignment code> et verticalalignement code> à " Centre " code> p>

Que dois-je faire? P>

Tout le code est le suivant: P>

<UserControl [...]>
    <Canvas Width="640" Height="480" Background="#FF881607">
        <Image Source="a.jpg" HorizontalAlignment="Center"  VerticalAlignment="Center" Stretch="Uniform"/>
    </Canvas>
</UserControl>


1 commentaires

Pouvez-vous aussi poster le XAML environnant? Peut-être qu'un parent de l'image n'est pas centré ou étiré.


4 Réponses :


6
votes

Si vous le mettez dans une grille, il sera centralisé automatiquement.

<UserControl>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Image Source="a.jpg" Stretch="Uniform"/>
        </Grid>
        <Grid Grid.Row="1" Margin="10">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Button Grid.Column="0" Content="Start"/>
            <Button Grid.Column="2" Content="Stop"/>
        </Grid>
    </Grid>
</UserControl>


0 commentaires

6
votes

La toile ne prend pas en charge l'horizontallignement de l'image. Si vous voulez une mise en page dynamique comme celle-ci, la toile est un mauvais choix (il est utile si vous voulez réellement ignorer forte> de cette mise en page). Quelle est la raison exacte que vous utilisez une toile?
Utilisez simplement une grille:

<Grid Background="#FF881607">
    <Image Source="a.jpg" HorizontalAlignment="Center"  VerticalAlignment="Center" Stretch="Uniform"/>
</Grid>


0 commentaires

0
votes

Vous pouvez affecter l'image à un imageBrush , puis définissez cette brosse comme arrière-plan de votre commande ou d'un autre élément (le remplir d'un rectangle par exemple).

Un imageBrush a une propriété alignmentx et < Code> Alignmenty Propriétés. Par défaut, ceux-ci sont tous deux définis sur Centre . xxx

 Stack Overflow Logo centré à l'intérieur de la fenêtre WPF

Le seul problème que j'ai trouvé est que l'image semble devenir très aliasée car elle réduit la taille. Je ne sais pas pourquoi c'est.


0 commentaires

0
votes
                 <Border Width="X" Height="X" HorizontalAlignment="Center">
                    <Border.Background>
                        <ImageBrush ImageSource="{Binding X}" Stretch="UniformToFill"/>
                    </Border.Background>
                </Border>

0 commentaires