Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

Открыть 2 картинки, переместить, записать координаты используя команду с параметрами

23.04.2019, 12:46. Показов 5345. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, я нажимаю кнопку открыть (в wpf-mvvm) выбираю картинку она должна быть расположена на главном экране приложения, потом нажимаю ещё раз открыть и повторяю действия ранее. т.е. у нас в контейнере 2 картинки будут, первая должна быть в верхнем левом углу контейнера, а когда загружаем вторую, мы стрелочками двигаем относительно первой(кнопками на форме или с клавы) пока вторая картинка не встанет рядом, когда мы двигаем картинку у нас в двух TextBox отображается смещение по x,y. И кнопка повернуть картинку после загрузки.

В каком контейнере разместить загружаемые фотографии?
Получается надо будет написать мин 6 команд (влево, право, вниз, вверх, открыть, повернуть) и 2 на TextBox который сообщает из контейнера на TextBox свои координаты?
Мб кто-то видел исходники похожего приложения, буду очень благодарен!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2019, 12:46
Ответы с готовыми решениями:

Третий элемент строки записать в регистр dx, используя соответствующую команду обработки строк
Во вспомогательном сегменте данных задана строка слов 120,130,140,150,160. Третий элемент строки записать в регистр dx, используя...

Как реализовать команду с параметрами
У меня возник вопрос. Я хочу сделать пару команд для своего консольного приложения, но как это реализовать? Вот пример одной команды: ...

Как открыть открыть окно с параметрами?
можно ли вообще как-то открыть окно (папка с файлами) с параметрами, а именно с определенными координатами на экране и в заданном размере?...

47
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
26.04.2019, 12:16  [ТС]
Студворк — интернет-сервис помощи студентам
FateOri, окей, а как надо?

Добавлено через 14 секунд
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сохранение результатов предусматривается?
- нет

Добавлено через 49 секунд
FateOri, надо через mvvm обязательно

Добавлено через 5 минут
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
надо заменить на TextBlock'
заменил
Цитата Сообщение от Элд Хасп Посмотреть сообщение
смещаться должно только одно изображение.
- загружаем первое фото, можем двигать, загружаем второе и данные у второго должны быть относительно первого фото, в перовом боле просто вывод текущего положения первого фото
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Где кнопка
- Да, это именно то, про что вы подумали))
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Отображение Смещения нужно сделать рядом с кнопками смещения
- не очень понял, но дизайн можно всегда переделать, самое главное логика)
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Как должно происходить смешение?
- первое фото загружаем, координаты 0,0 двигаем если захотим, поворачиваем, загружаем второе (0,0), двигаем , переворачиваем, координаты считаются относительно первого
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Нужна ещё дистанция смещения.
- можно , как вариант
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
26.04.2019, 12:19
Цитата Сообщение от ShmelVG Посмотреть сообщение
можно , как вариант
Это ни "как вариант" - это нужно обязательно.
Вот нажали на кнопку "Вправо" на сколько надо сместить изображение? На пиксель? На размер картинки? Вправо до границы холста? И т.д.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
26.04.2019, 12:27  [ТС]
Элд Хасп, на 1 пиксель
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
26.04.2019, 12:42
Цитата Сообщение от ShmelVG Посмотреть сообщение
FateOri, окей, а как надо?
так в тему во фрилансе создали:
https://www.cyberforum.ru/orde... 43532.html
какой мне прок помогать бесплатно если вы готовы платить?))

Вы уж определитесь какая помощь вам нужна.

Цитата Сообщение от ShmelVG Посмотреть сообщение
FateOri, надо через mvvm обязательно
MVVM это не значит - я не буду принципиально использовать CB.
Если вы работаете с представлением, то эта часть должна быть в CB или в поведениях ну вы поняли но никак не в VM.
За открытие диалога отвечает не VM.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
26.04.2019, 12:53  [ТС]
FateOri, Буду уже делать сам, странно что используется СВ, в других проектах, там нет ни строчки, всё во VM
0
Фрилансер
 Аватар для FateOri
761 / 458 / 146
Регистрация: 06.01.2017
Сообщений: 4,856
26.04.2019, 13:01
Цитата Сообщение от ShmelVG Посмотреть сообщение
FateOri, Буду уже делать сам, странно что используется СВ, в других проектах, там нет ни строчки, всё во VM
Если вы в CB запихиваете модель в элементы управления это нарушение MVVM
но если вы в CB запускаете анимацию, то тут нет нарушения, все находится на своем месте.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
26.04.2019, 13:26
Цитата Сообщение от ShmelVG Посмотреть сообщение
на 1 пиксель
У Вас в проекте взята не полностью рабочая реализации RelayCommand. Где-то в более поздних темах её исправляли.
Я прикладываю библиотеку - вставьте её в решение, а реализации RelayCommand и OnPropertyChangedClass из своего проекта удалите. В проекте вставьте ссылку на проект библиотеки.

Сделал класс для VM. Не проверял, но, вроде, ничего не забыл. Теперь во вьюхе надо установить все привязки.
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
namespace PhotoGluerFile.ViewModels
{
    public enum DirectionEnum { None, Left, Up, Rigth, Down }
    public class ImageMoveViewModel : OnPropertyChangedClass
    {
        private RelayCommand _rotateCommand;
        private ImageSource firstImage;
        private ImageSource secondImage;
        private double angle;
        private Point offset;
        private RelayCommand _moveCommand;
        private RelayCommand _loadCommand;
        private Size sizeSecondImage;
        private Size sizeCanvas;
        private Size sizeOffset;
 
        /// <summary>Первая картинка</summary>
        public ImageSource FirstImage { get => firstImage; set { firstImage = value; OnPropertyChanged(); } }
        /// <summary>Вторая картинка</summary>
        public ImageSource SecondImage { get => secondImage; set { secondImage = value; OnPropertyChanged(); } }
        /// <summary>Угол поворота</summary>
        public double Angle { get => angle; set { angle = value; OnPropertyChanged(); } }
        /// <summary>Смещение второй картинки</summary>
        public Point Offset { get => offset; set { offset = value; OnPropertyChanged(); } }
        /// <summary>Размер второй картинки</summary>
        public Size SizeSecondImage { get => sizeSecondImage; set { sizeSecondImage = value; OnPropertyChanged(); SetSizeOffset(); } }
        /// <summary>Размер холста</summary>
        public Size SizeCanvas { get => sizeCanvas; set { sizeCanvas = value; OnPropertyChanged(); SetSizeOffset(); } }
        /// <summary>Размер допустимого смещения</summary>
        public Size SizeOffset { get => sizeOffset; private set { sizeOffset = value; OnPropertyChanged(); } }
        /// <summary>Метод устанавливающий Размер допустимого смещения</summary>
        private void SetSizeOffset()
            => SizeOffset = new Size(SizeCanvas.Width - SizeSecondImage.Width, SizeCanvas.Height - SizeSecondImage.Height);
        public RelayCommand RotateCommand => _rotateCommand ?? (_rotateCommand = new RelayCommand(RotateMetod, RotateCanMetod));
 
        private void RotateMetod(object parameter)
        {
            if (parameter != null && double.TryParse(parameter.ToString(), out double tmp))
                Angle = tmp;
        }
 
        private bool RotateCanMetod(object parameter)
            => parameter != null && double.TryParse(parameter.ToString(), out double tmp);
 
        public RelayCommand MoveCommand => _moveCommand ?? (_moveCommand = new RelayCommand(MoveMetod, MoveCanMetod));
 
        private bool MoveCanMetod(object parameter)
        {
            if (parameter == null || !Enum.TryParse(parameter.ToString(), out DirectionEnum direct))
                return false;
            switch (direct)
            {
                case DirectionEnum.Left: return Offset.X > 0;
                case DirectionEnum.Rigth: return Offset.X < SizeOffset.Width;
                case DirectionEnum.Up: return Offset.Y > 0;
                case DirectionEnum.Down: return Offset.Y < SizeOffset.Height;
            }
            return false;
        }
 
        private void MoveMetod(object parameter)
        {
            if (parameter == null || !Enum.TryParse(parameter.ToString(), out DirectionEnum direct))
                return;
            switch (direct)
            {
                case DirectionEnum.Left:
                    if (Offset.X > 0)
                        Offset = new Point(Offset.X - 1, Offset.Y);
                    break;
                case DirectionEnum.Rigth:
                    if (Offset.X < SizeOffset.Width)
                        Offset = new Point(Offset.X + 1, Offset.Y);
                    break;
                case DirectionEnum.Up:
                    if (Offset.Y > 0)
                        Offset = new Point(Offset.X, Offset.Y-1);
                    break;
                case DirectionEnum.Down:
                    if (Offset.Y < SizeOffset.Height)
                        Offset = new Point(Offset.X , Offset.Y+1);
                    break;
            }
        }
 
        public RelayCommand LoadCommand => _loadCommand ?? (_loadCommand = new RelayCommand(LoadMetod, LoadCanMetod));
 
        /// <summary>Не реализован</summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        private bool LoadCanMetod(object parameter) => true;
 
        private static readonly ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
 
        private void LoadMetod(object parameter)
        {
            OpenFileDialog dlg = new OpenFileDialog()
            {
                DefaultExt = ".bmp",
                FileName = "MyImage.bmp",
                Filter = "Рисунки|*.bmp;*.png|Любые файлы|*.*"
            };
            bool? result = dlg.ShowDialog();
            if (result == true)
            {
                if (FirstImage == null)
                    FirstImage = (ImageSource)imageSourceConverter.ConvertFrom(dlg.FileName);
                else
                    SecondImage = (ImageSource)imageSourceConverter.ConvertFrom(dlg.FileName);
            }
        }
    }
}
Вложения
Тип файла: 7z CommLibrary.7z (14.9 Кб, 1 просмотров)
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
26.04.2019, 13:30
Point и Size из пространства System.Windows

Добавлено через 1 минуту
Все юсинги
C#
1
2
3
4
5
using CommLibrary;
using Microsoft.Win32;
using System;
using System.Windows;
using System.Windows.Media;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2019, 13:30

Использовать команду Shell для разных кнопок с разными параметрами
Здравствуйте, как быть когда нужно на кнопку, которая в документе Ворд повесить код типа этого Shell...

Picturebox переместить в заданные координаты
Как переместить picturebox в заданные координаты на форме?

Как переместить курсор на координаты относительно формы?
Здравствуйте! Задача такая: по нажатию на кнопку курсор должен перемещаться на определенные координаты внутри этой формы. Вариант...

Переместить картинки по номеру строки
Дорогие форумяне! помогите решить задачку - есть страница с изображениями и при перемещении ячейки по строкам, соотв количеству картинок,...

как переместить картинки в определенное место?
как кроме как прибавляя к лефту и топу значения передвинуть картинки на форме на нужное место? ну,чтобы выбрать им координаты?


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru