powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DPI Aware картинки - кто какой техникой пользуется?
25 сообщений из 34, страница 1 из 2
DPI Aware картинки - кто какой техникой пользуется?
    #39214785
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю первую WPF-прилагу. Вернее даже компонент, будет вызываться из основного приложения. Приложение без риббонов, но есть кнопки с битмапами. Если бы были риббоны, там всё классно - ставишь список битмапов с соответствующими тегами, и всё ништяк. А кто как с обычными картинками работает? Сразу скажу, основное приложении, и, соответственно компонент - System Aware (не Per-Monitor).

Мне пока первое, что пришло в голову - Сделать по текстовому атрибуту в ViewModel-е на каждую кнопку, и просто забиндить source для Image. А внутри сделать приспособу, что бы в зависимости от DPI возвращало нужное имя битмапа.

Ну понятно, что новичок сделает всё неправильно. Расскажите, как надо, кто на картинках собаку съел.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39214791
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно - вектор ))
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39214794
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Картинки, естественно, растровые. Есть 9 штук каждой - на каждое разрешение.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39215110
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
картина должна быть на уровне View, предпочтительнее всего закидывать нужные картинки в проект как Resources, создавать ресурсы XAML для них как BitmapSource и источников качестве uri ресурса самой картинки, если их много, то и ресурсов должно быть много.
Далее используй либо их через динамические ресурсы по статическому ключу ресурса, либо статические ресурсы по обычному ключу для просты дела.
Если 1 элемент интерфейса имеет несколько состояний и для каждого состояния своя картинка, делай триггеры и переключай ресурсы, либо подменяй ресурс по ключу (в варианте с динам. ресурсами)
Не стоит забывать, что разрешение в WPF не всегда 96 dpi.
Есть еще несколько проблем, проблема
А) если элемент спозиционирован не точно по пикселю, то всё его содержимое так же смещается и пиксели картинки оказывают между точками в WPF, что сильно смазывает саму картинку, но:
можно выравнивать элемент по точкам свойством SnapToDevicePixels и + можно менять тип рендеринга
Б) в ItemsControl элементах (и с панелями), размер элемента списка может не быть круглым числом, по этой причине все последующие элементы будут позиционироваться не в точное значение, а дробное, что тоже будет приводит к сдвигу картинки по ~0,n пикселов и её смазывание, можно округлять размер с помощью свойства
В) проблема в том, что когда ты выравниваешь картинку по пикселями в круглые значения, сама картинка оказывается не точно над пикселем, а между ними. Смысл в том, что при разрешении 96 dpi, координаты 0.0 это начало 1 (нулевого) пикселя, а 1.0 его конец и начало 2 пикселя.
Г) WPF это не WinForms, WPF изначально заложена векторная графика, по этому наилучшим образом туда подходит именно векторная графика. Геометрические иконкам можно менять цвет, размер, создавать анимацию, нет ни каких проблем в dpi, позиционированием, рендерингом, особенно в Visual контролах, где для этого есть соответствующий метод для Geometry объектов.
С векторной иконкой можно точно определить область действия этой иконки, то есть к примеру внутри кнопки можно сделать области, которые не будут являться поверхностью кнопки (дырки в контроле) :)

p.s. я давно не юзаю растр. графику в WPF, по этому надеюсь тут будут какие то советы
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39215462
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes, а в чём сейчас рисуют значки? SVG?
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39215486
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неважно в чем рисовать, в ресурсы они складываются в виде XAML (Geometry и т.п.)
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39215884
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thRoman Mejtes, а в чём сейчас рисуют значки? SVG?я из AI иконки делаю, но можно и из SVG, в AI удобно стандартным Blend'ом это делать
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222439
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesя из AI иконки делаю, но можно и из SVG, в AI удобно стандартным Blend'ом это делать
А какой формат вектора понимает 2010 студия? Я что-то SVG попробовал - не схавала. Как из AI в студию вставляешь, поподробнее можно?
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222449
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, не понял, что ты хотел сказать?
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222462
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thShocker.Pro, не понял, что ты хотел сказать?13thкакой формат вектора понимает 2010 студия?XAML. Векторные рисунки хранят в словарях ресурсов в виде XAML.

http://professorweb.ru/my/WPF/graphics_and_animation/level12/graph_animation_index.php
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222483
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProXAML. Векторные рисунки хранят в словарях ресурсов в виде XAML.

http://professorweb.ru/my/WPF/graphics_and_animation/level12/graph_animation_index.php

Это да. А как из Adobe Illustrator перевести в XAML? И что это за формат, прям файл с расширением XAML получается? Это точно не SVG - я попробовал, не работает:

Код: xml
1.
2.
3.
    <Grid>
        <Image Source="Images/logo.svg" Stretch="Fill" />
    </Grid>
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222485
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спросил у дизайнера, он говорит, у него в AI нет никакого XAML
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222521
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Expression Blend умеет конвертировать AI (и некоторые другие форматы) в разные варианты XAML
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222529
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222531
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proя пользуюсь вот этим
https://www.microsoft.com/en-us/download/details.aspx?id=36180 собственно, в нем можно и рисовать, хотя штука менее удобная, чем корел, но это дело привычки скорее всего. По крайней мере можно сделать мелкие правки загруженного извне изображения
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222544
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, я тут нашёл софтину, которая конвертинует SVG -> XAML. В результате получается или UserControl или Canvas, но по сути - это не изображения.

Т.е. мы делаем XAML-файл, в качестве хранилища внешнего ресурса, кладём туда этот UserControl или Canvas и потом цепляем его, например, на кнопку, вместо Image. И больше ничего делать не надо, оно само ресайзится под нужный DPI/размер, под пиксели подстраивается и т.д. Я правильно понял?
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222560
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thShocker.Pro, я тут нашёл софтину, которая конвертинует SVG -> XAML. В результате получается или UserControl или Canvas, но по сути - это не изображения.

Т.е. мы делаем XAML-файл, в качестве хранилища внешнего ресурса, кладём туда этот UserControl или Canvas и потом цепляем его, например, на кнопку, вместо Image. И больше ничего делать не надо, оно само ресайзится под нужный DPI/размер, под пиксели подстраивается и т.д. Я правильно понял?
Если картинка моноцветная, то можно сохранить просто геометрию, которая получена в результате импорта, если иконка многоцветная, то берем полученный Canvas и вставляем куда надо, если картинок несколько, то можно Canvas обернуть в DataTemplate'ы или использовать x:Shared, куча всяких вариантов
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222638
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё вопрос: как управлять большими объёмами картинок? Допустим, у меня в приложении 500 картинок. Сложить все в один XAML-файл? А как посмотреть оригинал? Рисовать форму, и вставлять в неё картинку? )-:
В общем, хотелось бы что-бы кто-нибудь рассказал о граблях, на которые тут можно наступить.

В идеале было бы как в старой студии: есть картинки в каком-то внятном формате, их можно по-мелочи подредактировать прямо в студии, а при сборке проекта они конвертируются в XAML, им проставляются id-шники и делается build.

В принципе, для этого можно настроить pre-build step, если бы была тулза, которая конвертирует набор файлов в xaml с заданными id-шниками.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222674
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thShocker.Pro, я тут нашёл софтину, которая конвертинует SVG -> XAML. В результате получается или UserControl или Canvas, но по сути - это не изображения.Я дал ссылку на софтину. Она умеет создавать GeometryDrawing или сразу готовые кисти.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222676
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thДопустим, у меня в приложении 500 картинок.организовать в несколько словарей ресурсов, можно каскадно.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222681
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thА как посмотреть оригинал?Blend позволяет открывать непосредственно солюшен и визуально редактировать в нем XAML-ы.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222698
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro13thShocker.Pro, я тут нашёл софтину, которая конвертинует SVG -> XAML. В результате получается или UserControl или Canvas, но по сути - это не изображения.Я дал ссылку на софтину. Она умеет создавать GeometryDrawing или сразу готовые кисти.
Ага, хорошая ссылка, спс, разобрался.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222701
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro13thА как посмотреть оригинал?Blend позволяет открывать непосредственно солюшен и визуально редактировать в нем XAML-ы.
Блин, мы пока до бленда не добрались. Могу позволить себе только VS2010.
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222709
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, сделал картинку, вот что получилось: (см аттач). Пока 9 растровых картинок получается красивее.
Вот что мне сгенерил Expression Designer:
Код: xml
1.
2.
3.
4.
5.
6.
7.
		<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="Layer_1_2" x:Key="Layer_1_2" Width="19" Height="20" Canvas.Left="0" Canvas.Top="0">
			<Path Width="8.15625" Height="8.71875" Canvas.Left="2.14062" Canvas.Top="2.45313" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF" Data="F1 M 9.79687,2.95313C 7.41146,2.96354 5.02604,2.97396 3.83333,4.26042C 2.64063,5.54688 2.64062,8.10938 2.64062,10.6719"/>
			<Rectangle Width="5.1875" Height="11.375" Canvas.Left="13.1094" Canvas.Top="1.32813" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF"/>
			<Rectangle Width="11.7813" Height="5.6875" Canvas.Left="0.703125" Canvas.Top="12.9844" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF"/>
			<Path Width="1" Height="5.28125" Canvas.Left="6.14062" Canvas.Top="13.2969" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 6.64063,13.7969L 6.64062,18.0781"/>
			<Path Width="4.78125" Height="1" Canvas.Left="13.2656" Canvas.Top="6.29688" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 13.7656,6.79688L 17.5469,6.79688"/>
		</Canvas>



Вот как использую:
Код: xml
1.
<Button Content="{StaticResource Layer_1_2}" />



Можно как-то сделать, что бы было пиксель-в пиксель? Ну хотя бы на кратных 100% (96DPI) разрешениях?
...
Рейтинг: 0 / 0
DPI Aware картинки - кто какой техникой пользуется?
    #39222728
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтоб было пиксель в пиксель, 1 пиксель должен иметь не 0 координаты, а 0,5 то есть указывать на середину пикселя, а не на его начало.
Для этого в DrawContext есть методы PushGuidelineSet.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    public class GuideLinesHelper : IDisposable
    {
        private readonly DrawingContext _context;

        public GuideLinesHelper(DrawingContext context, double penThikness, Rect rect) : this(context, penThikness, rect.TopLeft, rect.BottomRight) { }

        public GuideLinesHelper(DrawingContext context, double penThikness, Point point1, Point point2)
        {
            var halfPen = penThikness / 2;
            _context = context;

            var guidelines = new GuidelineSet();
            guidelines.GuidelinesX.Add(point1.X + halfPen);
            guidelines.GuidelinesY.Add(point1.Y + halfPen);
            guidelines.GuidelinesX.Add(point2.X + halfPen);
            guidelines.GuidelinesY.Add(point2.Y + halfPen);
            context.PushGuidelineSet(guidelines);
        }

        public void Dispose()
        {
            _context.Pop();
        }
    }



А вот еще 1 пример для отображения Bitmap рисунков, он не мой и его стоит объединить с верхним варианте, так как там смещение какой то хитро сделано :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
    public class BitmapImageEx : FrameworkElement
    {

      
        public BitmapImageEx()
        {
            _sourceDownloaded = OnSourceDownloaded;
            _sourceFailed = OnSourceFailed;
            this.SnapsToDevicePixels = true;
        }

        public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(
            "Source",
            typeof (BitmapSource),
            typeof (BitmapImageEx),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.AffectsRender |
                FrameworkPropertyMetadataOptions.AffectsMeasure,
                OnSourceChanged));

        public BitmapSource Source
        {
            get
            {
                return (BitmapSource) GetValue(SourceProperty);
            }
            set
            {
                SetValue(SourceProperty, value);
            }
        }

        public event EventHandler<ExceptionEventArgs> BitmapFailed;

        // Return our measure size to be the size needed to display the bitmap pixels.

        protected override Size MeasureOverride(Size availableSize)
        {
            var measureSize = new Size();

            var bitmapSource = Source;
            if (bitmapSource != null)
            {
                var ps = PresentationSource.FromVisual(this);
                if (ps != null)
                {
                    if (ps.CompositionTarget == null) return measureSize;
                    var fromDevice = ps.CompositionTarget.TransformFromDevice;

                    var pixelSize = new Vector(bitmapSource.PixelWidth, bitmapSource.PixelHeight);
                    var measureSizeV = fromDevice.Transform(pixelSize);
                    measureSize = new Size(measureSizeV.X, measureSizeV.Y);
                }
            }

            return measureSize;
        }

        

        //protected override Size MeasureCore(Size availableSize)
        //{

        //}

        protected override void OnRender(DrawingContext dc)
        {
            BitmapSource bitmapSource = Source;
            if (bitmapSource != null)
            {
                _pixelOffset = GetPixelOffset();

                // Render the bitmap offset by the needed amount to align to pixels.
                dc.DrawImage(bitmapSource, new Rect(_pixelOffset, DesiredSize));
            }
        }

        private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var bitmapImageEx = (BitmapImageEx) d;

            var oldValue = (BitmapSource) e.OldValue;
            var newValue = (BitmapSource) e.NewValue;

            if (((oldValue != null) && (bitmapImageEx._sourceDownloaded != null)) &&
                (!oldValue.IsFrozen && (oldValue is BitmapSource)))
            {
                oldValue.DownloadCompleted -= bitmapImageEx._sourceDownloaded;
                oldValue.DownloadFailed -= bitmapImageEx._sourceFailed;
                // ((BitmapSource)newValue).DecodeFailed -= bitmap._sourceFailed; // 3.5
            }
            if (((newValue != null) && (newValue is BitmapSource)) && !newValue.IsFrozen)
            {
                newValue.DownloadCompleted += bitmapImageEx._sourceDownloaded;
                newValue.DownloadFailed += bitmapImageEx._sourceFailed;
                // ((BitmapSource)newValue).DecodeFailed += bitmap._sourceFailed; // 3.5
            }
        }

        private void OnSourceDownloaded(object sender, EventArgs e)
        {
            InvalidateMeasure();
            InvalidateVisual();
        }

        private void OnSourceFailed(object sender, ExceptionEventArgs e)
        {
            Source = null; // setting a local value seems scetchy...

            BitmapFailed(this, e);
        }

        private void OnLayoutUpdated(object sender, EventArgs e)
        {
            // This event just means that layout happened somewhere.  However, this is
            // what we need since layout anywhere could affect our pixel positioning.
            Point pixelOffset = GetPixelOffset();
            if (!AreClose(pixelOffset, _pixelOffset))
            {
                InvalidateVisual();
            }
        }

        // Gets the matrix that will convert a point from "above" the
        // coordinate space of a visual into the the coordinate space
        // "below" the visual.
        private Matrix GetVisualTransform(Visual v)
        {
            if (v != null)
            {
                Matrix m = Matrix.Identity;

                Transform transform = VisualTreeHelper.GetTransform(v);
                if (transform != null)
                {
                    Matrix cm = transform.Value;
                    m = Matrix.Multiply(m, cm);
                }

                Vector offset = VisualTreeHelper.GetOffset(v);
                m.Translate(offset.X, offset.Y);

                return m;
            }

            return Matrix.Identity;
        }

        private Point TryApplyVisualTransform(Point point, Visual v, bool inverse, bool throwOnError, out bool success)
        {
            success = true;
            if (v != null)
            {
                Matrix visualTransform = GetVisualTransform(v);
                if (inverse)
                {
                    if (!throwOnError && !visualTransform.HasInverse)
                    {
                        success = false;
                        return new Point(0, 0);
                    }
                    visualTransform.Invert();
                }
                point = visualTransform.Transform(point);
            }
            return point;
        }

        private Point ApplyVisualTransform(Point point, Visual v, bool inverse)
        {
            var success = true;
            return TryApplyVisualTransform(point, v, inverse, true, out success);
        }

        private Point GetPixelOffset()
        {
            Point pixelOffset = new Point();

            PresentationSource ps = PresentationSource.FromVisual(this);
            if (ps != null)
            {
                Visual rootVisual = ps.RootVisual;

                // Transform (0,0) from this element up to pixels.
                pixelOffset = TransformToAncestor(rootVisual).Transform(pixelOffset);
                pixelOffset = ApplyVisualTransform(pixelOffset, rootVisual, false);
                pixelOffset = ps.CompositionTarget.TransformToDevice.Transform(pixelOffset);

                // Round the origin to the nearest whole pixel.
                pixelOffset.X = Math.Round(pixelOffset.X);
                pixelOffset.Y = Math.Round(pixelOffset.Y);

                // Transform the whole-pixel back to this element.
                pixelOffset = ps.CompositionTarget.TransformFromDevice.Transform(pixelOffset);
                pixelOffset = ApplyVisualTransform(pixelOffset, rootVisual, true);
                pixelOffset = rootVisual.TransformToDescendant(this).Transform(pixelOffset);
            }

            return pixelOffset;
        }

        private bool AreClose(Point point1, Point point2)
        {
            return AreClose(point1.X, point2.X) && AreClose(point1.Y, point2.Y);
        }

        private bool AreClose(double value1, double value2)
        {
            if (value1 == value2)
            {
                return true;
            }
            double delta = value1 - value2;
            return ((delta < 1.53E-06) && (delta > -1.53E-06));
        }

        private EventHandler _sourceDownloaded;
        private EventHandler<ExceptionEventArgs> _sourceFailed;
        private Point _pixelOffset;
    }
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / DPI Aware картинки - кто какой техникой пользуется?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]