web-dev-qa-db-fra.com

WPF: Comment afficher une image à sa taille originale?

J'ai un problème d'affichage d'images dans WPF.

Voici mon code:

<Button HorizontalAlignment="Left" Grid.Column="1" Grid.Row="5" Margin="0,5">
        <Button.Content>
            <StackPanel Orientation="Horizontal" Margin="10,0">
                <Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" />
                <TextBlock Text="添加" />
            </StackPanel>
        </Button.Content>
    </Button>

J'ai une image de taille originale 32 * 32, mais lorsque j'ai exécuté le code ci-dessus, l'image va s'étendre pour remplir tout l'espace, au-delà de sa taille d'origine. J'ai également défini la propriété "Stretch" sur "None", mais il semble que cela ne fonctionne pas.

Alors, comment puis-je résoudre ce problème? Merci!

96
jiluo

Ici est une question similaire. Réglage général Stretch="None" est assez.

Il est également très important que le DPI définisse l'image dans les métadonnées. Il m'a fallu un certain temps avant de comprendre que si le DPI de l'image était différent de celui du moniteur de DPI (généralement 96), WPF redimensionnera automatiquement l'image, car il essaie d'être indépendant de DPI .

123
Paya
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

Celui-ci fonctionne pour moi, pour une image avec 600x800 pixels et 96dpi.

@ rishad2m8 Si la taille est inconnue, vous pouvez tout d'abord la détecter avec https://msdn.Microsoft.com/en-us/library/system.drawing.image.size (v = vs.110) .aspx Je suppose.

Essayez de ne pas spécifier largeur ou hauteur, utilisez-le comme ceci:

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />
6
VoodooChild

Ajout à la réponse de Paya: pour compenser la tentative de WPF de s’adapter à la résolution des moniteurs, vous devriez pouvoir définir les paramètres Width et Height aux dimensions originales du fichier et utiliser Stretch="Fill". Cela a fonctionné pour moi.

3
sorrymissjackson

Si vous souhaitez afficher l'image avec la taille d'origine, mais que vous ne connaissez pas la taille de l'image, le meilleur moyen consiste à définir l'image en tant qu'arrière-plan de UIElement. Comme ça:

    <Button>
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>
0
shirley