Как я могу получить изображения в XAML для отображения в качестве их реального размера? - PullRequest
13 голосов
/ 03 декабря 2009

У меня есть 27 x 27 пиксельное изображение, которое я отображаю в WPF, но оно отображает больше размера окна .

Как заставить его отображать его фактический размер?

альтернативный текст http://www.deviantsart.com/upload/m20dk6.png

XAML:

<Window x:Class="TestImage23434.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel x:Name="MainStackPanel"/>
</Window>

Код сзади:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using System;

namespace TestImage23434
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            TextBlock tb = new TextBlock();
            tb.Text = "above image ";
            MainStackPanel.Children.Add(tb);

            Image img = new Image();
            img.Source = new BitmapImage(new Uri(@"C:\test\circle.png"));
            img.HorizontalAlignment = HorizontalAlignment.Left;
            img.VerticalAlignment = VerticalAlignment.Top;
            MainStackPanel.HorizontalAlignment = HorizontalAlignment.Left;
            MainStackPanel.VerticalAlignment = VerticalAlignment.Top;
            MainStackPanel.Children.Add(img);

            TextBlock tb2 = new TextBlock();
            tb2.Text = "below image";
            MainStackPanel.Children.Add(tb2);
        }
    }
}

Ответы [ 4 ]

20 голосов
/ 03 декабря 2009

img.Stretch = Stretch.None

По умолчанию свойство Stretch имеет значение Uniform, которое изменяет размер изображения, чтобы заполнить все доступное пространство.

6 голосов
/ 07 мая 2015

Ни один из этих советов не работал для меня. Некоторые трюки связывания - вот что заставило меня двигаться.

<Image Source="yourPic.png" Stretch="UniformToFill"
Width="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelWidth}"
Height="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelHeight}" />

Возможно, вы могли бы установить для Strech значение None, но это работало для моего приложения, использующего .net 4.5.1.

2 голосов
/ 03 декабря 2009
img.HorizontalAlignment = HorizontalAlignment.Left;
img.VerticalAlignment = VerticalAlignment.Top;
img.Stretch = Stretch.None;

StackPanel растянется, чтобы заполнить / переполнить любой контейнер, в котором он находится, если не указан его размер. Поскольку вы не устанавливаете поля или выравнивания для чего-либо, поведение по умолчанию для всего равно Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" или просто помещается «Растянуть для заполнения». Выравнивание / расположение ваших элементов решит эту проблему.

РЕДАКТИРОВАТЬ: Добавлено img.Stretch = Stretch.None;, также я создал пример приложения и проверил его ... он работает.

0 голосов
/ 18 февраля 2014

Это также может быть свойство DPI вашего изображения в его метаданных. Это должно быть 96. https://stackoverflow.com/a/4965404/659326

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...