Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
1

Отображение картинок (плитка)

19.12.2016, 14:15. Показов 3346. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, форумчане. Начну по порядку.
У меня возникла потребность отобразить картинки в плитке, но как это сделать я не знаю, потому что мне нужно не просто их отобразить.
Мне нужно сделать плитку из 5 картинок и подписями под ними, к этим картинкам будут привязаны некие классы, где и будет хранится информация, что будет выводиться под ними. Как привязать я знаю, но как их культурно вывести? Проблема в том, что в этой плитке должен быть параметр, что-то вроде "SelectedItem", Ибо из листа ниже, я, нажимая на кнопку, буду заменять выбранные в плитке картинки (то есть объекты).
И сразу 2-й вопрос, как создать такой LisiView, что бы в зависимости от кол-ва элементов, он генерировал кнопочки. И вся эта штукенция у меня сделана со строгим соблюдением паттерна MVVM.
Я буду признателен, если это будет кусочек разметки со скриншотом результата, спасибо
Миниатюры
Отображение картинок (плитка)  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2016, 14:15
Ответы с готовыми решениями:

Отображение картинок в ListView
Ни дня без вопросов! Есть задачка, ученическая. И наверняка что то подобное уже много раз было,...

Entity Framework 6 и отображение картинок BitmapImage
Здравствуйте ! Только начал изучать EF 6 и столкнулся с небольшой проблемой или не понимаением,...

DataGrid wpf отображение картинок в столбце
Доброго времени суток!! Мне необходимо отобразить динамически картинки в таблице. Все данные я...

Отображение картинок
Всем привет! в Теле if else если if не удовлетворяется условием , Хотелось бы предупредительный...

9
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
19.12.2016, 14:43 2
Цитата Сообщение от Hastin Посмотреть сообщение
как их культурно вывести?
Коллекцию данных нужно с помощью ItemsControl отображать.

Конкретной проблемы я не понял. Опишите конкретнее, пожалуйста.

Цитата Сообщение от Hastin Посмотреть сообщение
как создать такой LisiView, что бы в зависимости от кол-ва элементов, он генерировал кнопочки
Hastin, каких элементов?) Побольше подробностей, пожалуйста) Если отвечать без подробностей же, то можно использовать ItemsControl: берём кол-во "элементов", создаём другие элементы и засовываем их в ItemsSource для ItemsControl'а)
0
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
19.12.2016, 15:25  [ТС] 3
novikov.ea, хм, это будут классы, в классах поля\свойства, и адрес картинки будет, у каждого класса, я буду выводить (хочу выводить) картинку, а ниже из некоторых свойств брать данные, и выводить под этой самой картинкой

Добавлено через 29 секунд
А ниже, в листе, будут точно такие же классы, просто их там будет очень много, а вот эти 5, что в плитке, они как бы "избранные", во как

Добавлено через 1 минуту
Проблема в том, что когда я жмакаю на картинку, ту что в 5 "избранных", а затем выбираю какой-то элемент из списка ниже (где они так же отображаются, но не плиткой), и нажимаю на кнопку, ту что рядом с элементом из списка, этот самый элемент становится "избранным", вместо того, что я выбрал в плитке
0
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
19.12.2016, 15:27 4
ТО есть из нижнего ListView вы хотите выбирать элементы, нажимая на кнопку. И затем они должны отобразиться в коллекции сверху?
0
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
19.12.2016, 15:28  [ТС] 5
Просто эти 5 элементов, я буду сохранять, и работать с ними в коде

Добавлено через 14 секунд
novikov.ea, так точно, сударь
0
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
19.12.2016, 15:41 6
Общий смысл такой: должна быть общая ViewModel, которая содержит две коллекции ItemViewModel (пусть и в верхней коллекции, и в нижней будет один тип ViewModel - ItemViewModel). Также в общей ViewModel должно быть свойство SelectedItemVM (выбранный элемент в верхней коллекции). При нажатии на кнопку нужно удалять SelectedItemVM из верхней коллекции и добавлять тот ItemViewModel, чья кнопка была нажата.

А теперь вопрос: что именно у вас не получается?)
0
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
19.12.2016, 16:08  [ТС] 7
novikov.ea, я не знаю как это реализовать, но вы всё истолковали чертовски точно)

Добавлено через 2 минуты
Ладно, самая главная проблема - это как мне отобразить верхние 5 элементов? В ListView я думаю есть что-то вроде SelectedItem, как их связать я придумаю, проблема только кнопка ( к ней же ещё обработчик приклеить нужно) и верхняя коллекция

Добавлено через 2 минуты
Вы предлагаете написать отдельные модели представлений для эти коллекций? Скажу так, я не знаю как это делать, ибо вся программа у меня в одном cs файле, и отдельно модели я не писал ) Да, у меня код не знает о оболочке и наоборот, но отдельно модели под классы и коллекции я не писал, если нужно было вывести что-то в датагрид, я просто биндил на свойство с InotifyProrertyChanged и указывал какие поля отображать

Добавлено через 1 минуту
В общем так, мне нужно только что бы я смог запомнить в код выбранный элемент верхней горизонтальной коллекции, вы просто скажите мне, как мне (чем мне) воспользоваться, что бы горизонтально отобразить её, и всё

Добавлено через 1 минуту
Я думал использовать обычный Grid, сделать 5 столбцов, поместить туда картинки и TextBlock-и, но опять же, так нету SelectedItem
0
Эксперт .NET
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
19.12.2016, 16:27 8
Цитата Сообщение от Hastin Посмотреть сообщение
Ладно, самая главная проблема - это как мне отобразить верхние 5 элементов?
В ListBox'е)
Цитата Сообщение от Hastin Посмотреть сообщение
В ListView я думаю есть что-то вроде SelectedItem
Да, как раз SelectedItem и используйте.
Цитата Сообщение от Hastin Посмотреть сообщение
проблема только кнопка ( к ней же ещё обработчик приклеить нужно)
А что в ней проблемного? Вы же собираетесь использовать MVVM. Просто привяжите команду.
Цитата Сообщение от Hastin Посмотреть сообщение
Вы предлагаете написать отдельные модели представлений для эти коллекций?
Я предлагал сделать одну главную ViewModel, в которой будут находиться две коллекции.
Цитата Сообщение от Hastin Посмотреть сообщение
я не знаю как это делать, ибо вся программа у меня в одном cs файле
Плохо) Научитесь разделять файл. Сделайте один файл на каждый класс)
Цитата Сообщение от Hastin Посмотреть сообщение
отдельно модели под классы и коллекции я не писал
Я предлагал сделать ViewModel только для элементов коллекции, и одну главную ViewModel.
Цитата Сообщение от Hastin Посмотреть сообщение
мне нужно только что бы я смог запомнить в код выбранный элемент верхней горизонтальной коллекции, вы просто скажите мне, как мне (чем мне) воспользоваться, что бы горизонтально отобразить её, и всё
"что бы я смог запомнить в код". Запомнить в код? Это что-то новенькое))
Для настраивания логики отображения элементов в ItemsControl, нужно переопределить ItemsPanel, в которой будут отображаться элементы. Вы можете туда задать StackPanel с горизонтальной ориентацией. Но он не будет растягиваться ширине. Могу дать вам код панели, которая выдаёт всем элементам ровное количество пространства.
FixedSizeStackPanel
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
public class FixedSizeStackPanel : Panel
{
    #region Properties
 
    #region Orientation
 
    public static readonly DependencyProperty OrientationProperty =
        DependencyProperty.Register("Orientation", typeof (Orientation), typeof (FixedSizeStackPanel), new PropertyMetadata(Orientation.Vertical, OnOrientationChanged));
 
    public Orientation Orientation
    {
        get { return (Orientation)GetValue(OrientationProperty); }
        set { SetValue(OrientationProperty, value); }
    }
 
    private static void OnOrientationChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        var fixedLengthStackPanel = (FixedSizeStackPanel)sender;
        fixedLengthStackPanel.OnOrientationChanged((Orientation)e.NewValue, (Orientation)e.OldValue);
    }
 
    private void OnOrientationChanged(Orientation newValue, Orientation oldValue)
    {
        InvalidateVisual();
    }
 
    #endregion
 
    #endregion
 
    #region Overridden members
 
    protected override Size MeasureOverride(Size availableSize)
    {
        Size itemSize = GetItemSize(availableSize);
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(itemSize);
        }
        return availableSize;
    }
 
    protected override Size ArrangeOverride(Size finalSize)
    {
        Size itemSize = GetItemSize(finalSize);
        for (int i = 0; i < InternalChildren.Count; i++)
        {
            var child = InternalChildren[i];
            Point itemPosition = GetItemPosition(itemSize, i);
            var itemRect = new Rect(itemPosition, itemSize);
            child.Arrange(itemRect);
        }
        return finalSize;
    }
 
    #endregion
 
    private Size GetItemSize(Size panelSize)
    {
        switch (Orientation)
        {
            case Orientation.Horizontal:
                return new Size(panelSize.Width / InternalChildren.Count, panelSize.Height);
            case Orientation.Vertical:
                return new Size(panelSize.Width, panelSize.Height / InternalChildren.Count);
            default:
                throw new UnhandledCaseException(typeof (Orientation), Orientation);
        }
    }
 
    private Point GetItemPosition(Size itemSize, int index)
    {
        switch (Orientation)
        {
            case Orientation.Horizontal:
                return new Point(index * itemSize.Width, 0.0);
            case Orientation.Vertical:
                return new Point(0.0, index * itemSize.Height);
            default:
                throw new UnhandledCaseException(typeof (Orientation), Orientation);
        }
    }
}
1
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
19.12.2016, 16:46  [ТС] 9
novikov.ea, Нет, у меня под каждый класс отельные файлы, просто вью модель у меня под каждую страничку отдельно одна
Цитата Сообщение от novikov.ea Посмотреть сообщение
Для настраивания логики отображения элементов в ItemsControl, нужно переопределить ItemsPanel, в которой будут отображаться элементы. Вы можете туда задать StackPanel с горизонтальной ориентацией. Но он не будет растягиваться ширине. Могу дать вам код панели, которая выдаёт всем элементам ровное количество пространства.
А вот это, видимо, то что мне нужно И да, я не знал, что лист вью можно делать горизонтальным
Миниатюры
Отображение картинок (плитка)  
0
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
19.12.2016, 16:49  [ТС] 10
А про запомнить в код я имел ввиду примерно вот так

XML
1
2
3
4
5
6
7
<ComboBox Height="25"
Margin="10,0,10,0"
DisplayMemberPath="Key"
ItemsSource="{Binding Bosses}"
Opacity="0.6"
SelectedValue="{Binding SelectedBoss}"
SelectedValuePath="Value" />
0
19.12.2016, 16:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2016, 16:49
Помогаю со студенческими работами здесь

Асинхронное отображение картинок
Суть в том что я не могу сформулировать предложение для поисковых запросов - помогите Мне нужно...

Отображение картинок в ListView из ImageList
Проблема с отображением картинок в ListView. Перепробывал все способы, примеры из MSDN и с форумов....

Отображение картинок в Asp.Net MVC
Есть в таблице тип image. C помощью Entity framework сформирован класс со свойством типа binary....

Корректное отображение картинок из базы данных ACCESS
Здравствуйте, есть программа типо магазина, хочу сделать строку поиска по БД, использую ACCESS, ...

Отображение картинок
Здравствуйте! начинаю только знакомиться с версткой, столкнулась с проблемой отображения...

Отображение картинок
Создал таблицу а в ней картинку: &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru