Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Не могу вывести Image, подсобите! / 25 сообщений из 50, страница 1 из 2
04.03.2021, 15:55
    #40050727
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
var wpfimg = new System.Windows.Controls.Image();
                        var img = ((ImageList)((gridControl1.MainView as GridView).Images)).Images[5];
                        using (var stream = new System.IO.MemoryStream())
                        {
                            img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                            wpfimg.Source = System.Windows.Media.Imaging.BitmapFrame.Create(stream,
                                                                                            System.Windows.Media.Imaging.BitmapCreateOptions.None, 
                                                                                            System.Windows.Media.Imaging.BitmapCacheOption.OnLoad);
                        }

                        gcc.DataContext = wpfimg;

                        const string aaml = @"<DataTemplate
                                                               xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
                                                               xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
                                                               >
                                                               <Image x:Name=""img1"" Width=""16"" Height=""16"" Source=""{Binding}"" Stretch=""None""/>
                                                         </DataTemplate>"; 

                        gcc.HeaderCustomizationAreaTemplate = System.Windows.Markup.XamlReader.Parse(aaml) as                                                                                                                                               
 System.Windows.DataTemplate;
...
Рейтинг: 0 / 0
04.03.2021, 20:57
    #40050860
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
вы создаете элемент управления Control.Image и передаете его в качестве контекста элементу gcc...
понять, что это такое и почему это вообще должно работать, не представляется возможным.
...
Рейтинг: 0 / 0
04.03.2021, 21:26
    #40050864
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Roman Mejtes,

gcc - GridColumn, у него есть Header, а у Header - HeaderCustomizationArea? вот я пытаюсь задать Темплейт для этого элемента через DataContext Родителя (gcc), но почему то Binding не делает ожидаемого.

При этом gcc.HeaderCustomizationAreaTemplate.LoadContent() показывает, что Image там имеется, но на экране пусто.
...
Рейтинг: 0 / 0
04.03.2021, 21:28
    #40050866
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos,

Вместо белых кружочков на хедерах столбцов (Смещение относительное, Смещение абсолютное) должна появиться другая картина.
Если для Source вместо {Binding} указать Uri, то все нормально, но мне надо динамически сгенерировать имейдж и передать в кусок XAML через парсер, так как у меня нет инфраструктуры WPF, я просто хочу заменить WinForms дерево на WPF Grid Девок.
...
Рейтинг: 0 / 0
04.03.2021, 22:53
    #40050886
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos , GridColumn или DataGridColumn?

Uri вы задаёте так же на Шарпе в коде шаблона (через парсер XAML) или в XAML ?

И в целом, не вижу смысла здесь использовать такое сложное задание шаблона.
Задайте в XAML шаблон с каким-то дефолтным значением для Source (чтобы в режиме Разработки было удобнее).
А в Шарпе пройдитесь по визуальному дереву и измените значение Source на ваше изображение без всякой привязки.

И, насколько помню, колонки не являются частью визуального дерева.
Они используются только как данные для создания визуальной части строки заголовков.
После загрузки (Loaded) менять что-то в колонках смысла нет.
Надо пройти по визуальному дереву DataGrid и в нём найти нужный Image.
...
Рейтинг: 0 / 0
04.03.2021, 23:34
    #40050898
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp,

gcc = new DevExpress.Xpf.Grid.GridColumn();

Uri через парсер XAML. Такой код работает. Мне этот чертов Image надо как то передать в парсер,
Через Resource в коде не получается (парсер не видит родителя), через DataContextтоже (хотя тут Image передан в DataTemplate, я вижу его при gcc.HeaderCustomizationAreaTemplate.LoadContent(). Но, почему то не визуализируется и проходит тихо, без икзепшн.

Код: c#
1.
2.
3.
4.
5.
6.
                       const string aaml = @"<DataTemplate
                                                 xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
                                                 xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
                                                 <Image x:Name=""img1"" Source=""add_16x.png"" Width=""16"" Height=""16"" Stretch=""None""/>
                                              </DataTemplate>"; 
                        gcc.HeaderCustomizationAreaTemplate = System.Windows.Markup.XamlReader.Parse(aaml) as System.Windows.DataTemplate;



Дык, что бы получить в визуальном дереве этот image в нужном месте надо что бы сработал этот кусок и вставил image куда надо.
Блин, надо поискать, как этот DataTemplate в коде делается, что б без парсера.
Нет тут WPF, в Винформс вставлен через ElementHost этот грид.
...
Рейтинг: 0 / 0
04.03.2021, 23:36
    #40050899
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos,

ааа, ты имеешь ввиду, допустим так через Uri и оставить , а потом уж поменять Image в визуальном дереве?
щас попробую
...
Рейтинг: 0 / 0
05.03.2021, 00:11
    #40050903
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos,

+ выводятся, но сам объект Image не могу поймать - FindName("img1") = null
Код: c#
1.
2.
3.
4.
5.
6.
7.
                        const string aaml = @"<DataTemplate
                                                 xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
                                                 xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
                                                 <Image x:Name=""img1"" Source=""C:\Users\Saxavat\Documents\Visual Studio 2015\Projects\VIP_DEV\ВИПРОС\bin\Release\add_16x.png"" Width=""16"" Height=""16"" Stretch=""None""/>
                                              </DataTemplate>"; 

                        gcc.HeaderCustomizationAreaTemplate = System.Windows.Markup.XamlReader.Parse(aaml) as System.Windows.DataTemplate;
...
Рейтинг: 0 / 0
05.03.2021, 00:15
    #40050905
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos , ещё вариант.
Можно вместо ресурсов использовать статический класс.
Создаёте статическое свойство типа ImageSource.
А в шаблоне привязываетесь к нему {Binding Source={x:Static local:Class.Property}}
...
Рейтинг: 0 / 0
05.03.2021, 00:18
    #40050906
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos

+ выводятся, но сам объект Image не могу поймать - FindName("img1") = null


У шаблонов своё дерево имён.
Посмотрите в Динамическом Визуальном Дереве как вложены элементы, и ищите по этой вложенности.
Более конкретно сказать не могу - для этого надо запускать приложение.
И с DevExpress совершенно не знаком.
...
Рейтинг: 0 / 0
05.03.2021, 01:05
    #40050909
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp
ViPRos , ещё вариант.
Можно вместо ресурсов использовать статический класс.
Создаёте статическое свойство типа ImageSource.
А в шаблоне привязываетесь к нему {Binding Source={x:Static local:Class.Property}}

Пробовал, но парсер класс ищет Window, но у меня Form.
...
Рейтинг: 0 / 0
05.03.2021, 01:08
    #40050910
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp
ViPRos

+ выводятся, но сам объект Image не могу поймать - FindName("img1") = null


У шаблонов своё дерево имён.
Посмотрите в Динамическом Визуальном Дереве как вложены элементы, и ищите по этой вложенности.
Более конкретно сказать не могу - для этого надо запускать приложение.
И с DevExpress совершенно не знаком.


Динамическом Визуальном Дереве? Где взять?

(VisualTreeHelper и LogicalTreeHelper ничем не помогли, нет такого имени img1 нигде)
...
Рейтинг: 0 / 0
05.03.2021, 01:34
    #40050911
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos
Пробовал, но парсер класс ищет Window, но у меня Form.

Возможно для DevExpress надо какие-то иные способы применять.
Надо запускать приложение и разбираться в отладке.
Без этого не могу ничего сказать.
...
Рейтинг: 0 / 0
05.03.2021, 09:54
    #40050955
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
зачем вообще этот цирк с парсингом XAML?
Создайте ресурсный файл, подключите его к App\Окну и пользуйтесь. Весь этот цирк с динамической загрузкой XAML пахнет говницом.
Делать так 100% не нужно, так как это не имеет никакого смысла
...
Рейтинг: 0 / 0
05.03.2021, 13:44
    #40051048
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Roman Mejtes
зачем вообще этот цирк с парсингом XAML?
Создайте ресурсный файл, подключите его к App\Окну и пользуйтесь. Весь этот цирк с динамической загрузкой XAML пахнет говницом.
Делать так 100% не нужно, так как это не имеет никакого смысла


Уже несколько раз говорил, что мне надо в WinForms через ElementHost показать WPF Grid вместо WinForm Grid.
Кроме этого грида на форме много чего имеется, показывал форму.
Так что нет никакого System.Window.Application, Window и т.д., естественно нет и их ресурсов и т.д.
Да тут дело вообще то не в парсере, мне кажется, я как то не правильно в том куске DataTemplate неправильно задаю Binding.
Есть в проге объект (image), надо его показать в Темплейте, я читал про DataContext, что он передается по дереву вниз (и правда передается) и потому этот image присвоил DataContext вышестоящего по иерархию элемента. Но, так как это же DataContex и будет DataContex для Content темплейта, я просто дал ссылку в виде

<DataTemplate>
<Image Source={Binding}/>
</DataTemplate>

вот думаю что то тут неправильно.
Source={Binding} - вот это насколько правильно?
...
Рейтинг: 0 / 0
05.03.2021, 14:33
    #40051079
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos , я не совсем понимаю, что вы делаете в коде, поэтому сначала уточняющие вопросы.

1) Создаёте Image:
Код: c#
1.
   var wpfimg = new System.Windows.Controls.Image(); 



2) Получили картинку и передали её в в созданный Image:
Код: c#
1.
2.
   img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
   wpfimg.Source = System.Windows.Media.Imaging.BitmapFrame.Create(....);



3) Передали в Контекст Данных созданный Image:
Код: c#
1.
   gcc.DataContext = wpfimg;



4) В шаблоне Image получает источник из Контекста Данных:
Код: xml
1.
   <Image x:Name=""img1"" Width=""16"" Height=""16"" Source=""{Binding}"" Stretch=""None""/>



Если всё так, то какую я вижу очевидную проблему.
Image.Source должен получать значение в типе ImageSource.
Вы же ему передаёте тип System.Windows.Controls.Image, что приводит к ошибке привязки.
По идее, в окне Вывод должно было быть сообщение об этой ошибке.

Если я прав, то вам следует сделать следующим образом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    ImageSource imageSource;
    var img = ((ImageList)((gridControl1.MainView as GridView).Images)).Images[5];
    using (var stream = new System.IO.MemoryStream())
    {
        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
        imageSource = System.Windows.Media.Imaging.BitmapFrame.Create(
                                      stream,
                                      System.Windows.Media.Imaging.BitmapCreateOptions.None, 
                                      System.Windows.Media.Imaging.BitmapCacheOption.OnLoad);
    }
    gcc.DataContext = imageSource;



P.S. И рекомендация для строки XAML в Шарпе.
Чем использовать двойные "" удобнее одинарные ' .
...
Рейтинг: 0 / 0
05.03.2021, 14:55
    #40051086
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp,

Естественно, делал и так :) без толку. Это можно и в XAML
<Image Source="Binding Source}"/>
...
Рейтинг: 0 / 0
05.03.2021, 15:06
    #40051091
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp,

Из за этих "< >!... и т.д. фигни и не стал в свое время работать с ML языками :)
...
Рейтинг: 0 / 0
05.03.2021, 15:20
    #40051101
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos,

Да уж, все эти XAMLы ... идут лесом против Code! :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
          
            var wpfimg = new System.Windows.Controls.Image();
            var img = ((ImageList)((gridControl1.MainView as GridView).Images)).Images[5];
            using (var stream = new System.IO.MemoryStream())
            {
                    img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                    wpfimg.Source = System.Windows.Media.Imaging.BitmapFrame.Create(stream,
                                                                       System.Windows.Media.Imaging.BitmapCreateOptions.None, 
                                                                       System.Windows.Media.Imaging.BitmapCacheOption.OnLoad);
             }
     
            var dataTemplate = new System.Windows.DataTemplate();

            var imageFactory = new System.Windows.FrameworkElementFactory(typeof(System.Windows.Controls.Image));
            imageFactory.SetValue(System.Windows.Controls.Image.SourceProperty, wpfimg.Source);
            imageFactory.SetValue(System.Windows.Controls.Image.StretchProperty, System.Windows.Media.Stretch.None);

            dataTemplate.VisualTree = imageFactory;

            gcc.HeaderCustomizationAreaTemplate = dataTemplate;
...
Рейтинг: 0 / 0
05.03.2021, 15:50
    #40051113
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos,

но, на самом то деле мы так и не смогли заставить работать XAML с DataContext, почему то Image там не создается, хотя все метаданные в темплейте видны.
Точно такая же штука с TextBlock отлично работает. Но, тут {Binding} ссылается на gcc.Header (хотя я это не задавал!)
Код: c#
1.
2.
3.
4.
5.
6.
                const string caml = @"<DataTemplate
                                         xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
                                         xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
                                         <TextBlock Text=""{Binding}"" TextWrapping=""Wrap"" TextTrimming=""None""/>
                                      </DataTemplate>";
                gcc.HeaderTemplate = System.Windows.Markup.XamlReader.Parse(caml) as System.Windows.DataTemplate;
...
Рейтинг: 0 / 0
05.03.2021, 18:10
    #40051147
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos
но, на самом то деле мы так и не смогли заставить работать XAML с DataContext, почему то Image там не создается, хотя все метаданные в темплейте видны.
Точно такая же штука с TextBlock отлично работает.

Мне тоже это интересно.

Есть ещё предположение, что HeaderCustomizationAreaTemplate применяется не к DataContext, а к другому свойству.
Пример свойства ContentControl: Content и ContentTemplate.
ContentTemplate применяется к Content и изменение DataContext может не повлиять на ContentTemplate.

Попробуйте в этом шаблоне задать обычный TextBlock, чтобы понять к чему идёт привязка:
Код: c#
1.
2.
3.
4.
5.
6.
7.
@"<DataTemplate
       xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
       xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
       >
       <--!<Image x:Name=""img1"" Width=""16"" Height=""16"" Source=""{Binding}"" Stretch=""None""/>-->
       <TextBlock Text=""{Binding}""/>
</DataTemplate>"; 
...
Рейтинг: 0 / 0
05.03.2021, 18:20
    #40051154
Eld Hasp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
ViPRos , а восходящие привязки типа FindAncestor работают?
Если да то можно задать привязку к свойству DataContext типа GridColumn.
...
Рейтинг: 0 / 0
05.03.2021, 19:45
    #40051183
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp
ViPRos , а восходящие привязки типа FindAncestor работают?
Если да то можно задать привязку к свойству DataContext типа GridColumn.

Да пробовал.
Ну, блин, а я что делаю? Я и написал - gcc.DataContext = wpfimg;
И рассчитывая (правильно) что этот DataContext будет передаваться всем детям по иерархии и дойдет до ColumnHeaderCustomizationArea написал, рассчитывая что вместо {Binding} будет wpfimg(.Source пробовал тоже)

<DataTemplate>
<Image Source="{Binding}"/>
</DataTemplate>
...
Рейтинг: 0 / 0
05.03.2021, 19:48
    #40051185
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp
ViPRos
но, на самом то деле мы так и не смогли заставить работать XAML с DataContext, почему то Image там не создается, хотя все метаданные в темплейте видны.
Точно такая же штука с TextBlock отлично работает.

Мне тоже это интересно.

Есть ещё предположение, что HeaderCustomizationAreaTemplate применяется не к DataContext, а к другому свойству.
Пример свойства ContentControl: Content и ContentTemplate.
ContentTemplate применяется к Content и изменение DataContext может не повлиять на ContentTemplate.

Попробуйте в этом шаблоне задать обычный TextBlock, чтобы понять к чему идёт привязка:
Код: c#
1.
2.
3.
4.
5.
6.
7.
@"<DataTemplate
       xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
       xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" 
       >
       <--!<Image x:Name=""img1"" Width=""16"" Height=""16"" Source=""{Binding}"" Stretch=""None""/>-->
       <TextBlock Text=""{Binding}""/>
</DataTemplate>"; 



Чуть позже попробую с ТекстБлок, так мы хотя бы увидим название проперти.
...
Рейтинг: 0 / 0
05.03.2021, 20:04
    #40051190
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу вывести Image, подсобите!
Eld Hasp,

Привязка идет к GridColumnData, Contains information about a column. This class supports the internal infrastructure and is not intended to be used directly from your code.

Properties Description
Name
....ю
Column - Gets the grid column.
Data - Gets or sets an object that contains grid data. Inherited from GridDataBase.
.....
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Не могу вывести Image, подсобите! / 25 сообщений из 50, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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