2012-01-24 3 views
3

В рамках приложения, у меня есть объект холста <Canvas Name="canvas"/>, в который я пытаюсь вставить компоненты часов следующихизображения в WPF размера изменения холста

// Add Background 
Image bg = new Image(); 
bg.SetValue(Canvas.ZIndexProperty, 0); 
bg.Source = new BitmapImage(new Uri("images/background.png", UriKind.Relative)); 
canvas.Width = bg.Source.Width; 
canvas.Height = bg.Source.Height; 
canvas.Children.Add(bg); 

// Add second hand 
Image hand = new Image(); 
hand.SetValue(Canvas.ZIndexProperty, 10); 
hand.Source = new BitmapImage(new Uri("images/hand.png", UriKind.Relative)); 
canvas.Children.Add(hand); 

Первого изображения (BG) появляется корректно, но вторая (ручная), по-видимому, масштабируется (исходный размер составляет 5 х 61 пиксель, запрос размера изображения после создания показывает, что он стал 6,66 х 84,02 единиц отображения) (bg оригинал 130 х 130 пикселей и показывает 130,4 дюйма дисплеи)

Все ответы на мой запрос, который я могу найти (StackOverflow и Google), предлагают набор DPI но оба изображения - 96 DPI (согласно Paint) Я попытался переместить объявления изображений в XAML (не долгосрочное решение), но это не имеет значения. Я попытался изменить порядок, в который я вставляю изображения без эффекта. Я установил ширину/высоту холста явно в XAML - никакого эффекта. Я установил размер изображения явно - снова никакого эффекта.

Может ли кто-нибудь сказать мне, что происходит?

добавил: Составлен с использованием .NET 4 на windows7 64bit

Постановили: Краски отчетности неверную DPI настройки для изображения. Paint.Net дал мне правильное значение и изменение этого 96 DPI проблема была решена

+0

Есть ли причина, по которой вы пишете это в коде вместо XAML? –

+1

Большинство настроек будут динамическими. Руки будут повернуты, если необходимо, а вторая - не обязательна. В будущем я ожидаю, что у вас будут различные дополнительные компоненты, которые будут решаться программно. – Taoist

+0

Добавлено: Я только что попробовал добавить оба изображения в XAML - Та же проблема – Taoist

ответ

1

Решение проблемы: краска сообщила о некорректном DPI. Использование альтернативного пакета Paint (Paint.net) показало, что DPI отличается. Исправлена ​​эта проблема.

0

Не установлены Width и Height для второго изображения, и это было, вероятно, причиной проблемы. Вы также можете попробовать отключить изображение растяжку, добавив строку (это должно по крайней мере, не масштабировать изображение, даже если элемент управления масштабируется):

hand.Stretch = Stretch.None; 

Update: Я только что заметил, что вы имеете уже попытался установить размеры изображения. Попробуйте установить код в коде. В настоящее время я ищу другие возможные причины этой проблемы.

Обновление II: Я вижу, вы нашли решение. Я рад, что вы сделали это работать :).

Смежные вопросы