Ответ 1
img.Stretch = Stretch.None
По умолчанию свойство Stretch имеет значение Uniform
, которое изменяет размер изображения для заполнения всего доступного пространства.
У меня есть пиксельное изображение 27 x 27, которое я показываю в WPF, но оно отображает больше, чем размер окна .
Как я могу заставить его отображать его фактический размер?
alt text 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);
}
}
}
img.Stretch = Stretch.None
По умолчанию свойство Stretch имеет значение Uniform
, которое изменяет размер изображения для заполнения всего доступного пространства.
Ни один из этих советов не работал у меня. Некоторые привязанные трюки - вот что заставило меня идти.
<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.
img.HorizontalAlignment = HorizontalAlignment.Left;
img.VerticalAlignment = VerticalAlignment.Top;
img.Stretch = Stretch.None;
StackPanel будет растягиваться, чтобы заполнить/переполнить любой контейнер, если он не указан. Поскольку вы не устанавливаете поля или выравнивания ни на чем, поведение по умолчанию для всего - Margin="0,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
, или просто поместите "Stretch to fill". Выравнивание/позиционирование ваших элементов устранит эту проблему.
EDIT: Добавлено img.Stretch = Stretch.None;
, я также создал образец приложения и протестировал его... он работает.
Это также может быть ваше свойство DPI изображения в его метаданных. Это должно быть 96. fooobar.com/info/70378/...