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

Склейщик фото (создание MVVM приложения)

29.04.2019, 16:36. Показов 9159. Ответов 162
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Тема создана как продолжение тем:
Привязать данные к кнопке System.Windows.Data Error: 40
Открыть 2 картинки, переместить, записать координаты используя команду с параметрами
ScrollViewer по вертикали и горизонтали
После выбора файла в диалоговом окне, разместить изображение из файла в canvas
Подключить класс Bitmap

Элд Хасп, я хотел бы после загрузки первого фото, поворачивать её и перемещать, в специальной графе будут отображаться начальные координаты первого фото (левого верхнего угла), и чтоб при загрузки они всегда были бы в верхнем левом углу, потом загружаю второе фото(в специальном месте отображаются координаты 2-ого фото левого верхнего угла), хотел бы так же поворачивать (сейчас после загрузки второго фото поворачиваются 2 картинки, а не вторая), и в специальном месте отображать смещение второго фото по сравнению с первым (так же, по левому верхнему углу). Я не очень понял на счет размеров, я хотел бы чтобы фото отображались во всю величину, но я не буду знать какого фото будут размера. Сейчас приложение ведет себя очень странно, копки стали действительно активны, спасибо! Но когда я пытаюсь их сдвинуть, значение меняется в Text="{Binding Offset}", только не обычно, влево/право - целые числа, а вверх/вниз меняются, сотые этого числа, при этом картинки сами не двигаются, ни первая, ни вторая...

Добавлено через 2 минуты
Элд Хасп, когда запускаю приложение, кнопка вверх и влево не активны, они становятся активны если кликнуть вправо/вниз

Добавлено через 1 минуту
Элд Хасп, задав жестко размер картинке, она деформируется
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2019, 16:36
Ответы с готовыми решениями:

Структура WPF приложения на MVVM
Здравствуйте. Разрабатываю приложение на WPF. Использую шаблон MVVM. В представлении контент сгруппирован по вкладкам TabControl. ...

Пример реализации WPF+MVVM приложения
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html Пример решения ТЗ по теме...

Паттерн MVVM или как писать приложения на WPF
Собтвенно вопрос в заголовке. По-скольку WPF поддерживает привязку различным образом наверно это нужно как-то использовать, а не просто как...

162
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 16:19  [ТС]
Студворк — интернет-сервис помощи студентам
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Метод LoadImage загрузки изображения по полученному строковому амперметру. При загрузке устанавливает значения свойств Source, Width и Height. Возможно сбрасываться свойства Top, Left и Angle.
- что вы имели ввиду? Не очень понял)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 17:18
Цитата Сообщение от ShmelVG Посмотреть сообщение
- что вы имели ввиду? Не очень понял)
Метод LoadImage относится к Модели, поэтому он не должен содержать визуального интерфейса. Он должен в строковом параметре получать имя файла и пытаться сделать загрузку из него. Если загрузка не удачна, то выбрасывает исключение.

Команда загрузки изображения в VM вызывает диалог для получения имени файла. После получения имени файла вызывает метод LoadImage, передавая ему это имя файла. Если получает исключение из метод LoadImage, то выводит сообщение об ошибке загрузки.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 17:26  [ТС]
Элд Хасп, вы могли бы показать реализацию этого метода? В итоге я создал класс в модели ImageModify: OnPropertyChangedClass реализовал все эти св-ва без метода. В VM создал папку commands и в нем 4 класса BooleanToVisibilityConverter, OnPropertyChangedClass, SimpleMultiConverter, RelayCommand. В VM создал класс MainVM в котором буду всё реализовывать что вы писали ранее
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сама VM:
Добавлено через 3 минуты
Элд Хасп, немного переделал дизайн, сделал 2 кнопки на фото и вместо текстбокса с вводом градусов поворота создал 8 кнопок 4-влево, 4 - вправо
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 17:59
Цитата Сообщение от ShmelVG Посмотреть сообщение
вы могли бы показать реализацию этого метода?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void LoadImage(string fileName)
        {
 
            try
            {
                Image = (ImageSource)imageSourceConverter.ConvertFrom(fileName);
                Source = fileName;
                Width = Image.Width; // Вот это надо проверять
                Height = Image.Height; // не знаю это реальные размеры или приведённые
                Top = Left = Angle 0;
            }
            catch (Exception)
            {
 
                throw new Exception("Ошибка загрузки изображения");
            }
        }
И покажите что Вы сделали.

Добавлено через 5 минут
Даже так лучше будет - универсальнее
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private static readonly ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
        private void LoadImage(object imageSource)
        {
 
            try
            {
                Image = (ImageSource)imageSourceConverter.ConvertFrom(imageSource);
                Source = imageSource;
                Width = Image.Width; // Вот это надо проверять
                Height = Image.Height; // не знаю это реальные размеры или приведённые
                Top = Left = Angle 0;
            }
            catch (Exception)
            {
 
                throw new Exception("Ошибка закгрузки изображения");
            }
        }
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 18:02  [ТС]
Элд Хасп, а imageSourceConverter - это откуда?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Angle 0
ошибка на числе - В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта

Добавлено через 49 секунд
Элд Хасп, я просто начал с 0, заново
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 18:02
Цитата Сообщение от ShmelVG Посмотреть сообщение
ошибка на числе
Знак равенства перед ноль пропустил
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 18:03  [ТС]
Элд Хасп, 2 ошибки в методе, вот модель

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
using PhotoGluer.ViewModels.Commands;
using System;
using System.Windows.Media;
 
namespace PhotoGluer.Models
{
    public class ImageModify: OnPropertyChangedClass
    {
        #region Свойства
        public ImageSource Image { get => Image; set { Image = value; OnPropertyChanged(); } }
        /// <summary>
        /// Сохранениt ссылки на источник картинки
        /// </summary>
        public string Source { get => Source; set { Source = value; OnPropertyChanged(); } }
        /// <summary>
        /// Позиционирование картинки
        /// </summary>
        public double Top { get => Top; set { Top = value; OnPropertyChanged(); } }
        /// <summary>
        /// Позиционирование картинки
        /// </summary>
        public double Left { get => Left; set { Left = value; OnPropertyChanged(); } }
        /// <summary>
        /// Размер картинки
        /// </summary>
        public double Width { get => Width; set { Width = value; OnPropertyChanged(); } }
        /// <summary>
        /// Размер картинки
        /// </summary>
        public double Height { get => Height; set { Height = value; OnPropertyChanged(); } }
        /// <summary>
        /// Поворот картинки
        /// </summary>
        public double Angle { get => Angle; set { Angle = value; OnPropertyChanged(); } }
        /// <summary>
        /// Идентификация выбранной картинки
        /// </summary>
        public double IsSelected { get => IsSelected; set { IsSelected = value; OnPropertyChanged(); } }
        #endregion
 
        private static readonly ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
        private void LoadImage(object imageSource)
        {
 
            try
            {
                Image = (ImageSource)imageSourceConverter.ConvertFrom(imageSource);
                Source = imageSource;
                Width = Image.Width; // Вот это надо проверять
                Height = Image.Height; // не знаю это реальные размеры или приведённые
                Top = Left = Angle 0;
            }
            catch (Exception)
            {
 
                throw new Exception("Ошибка закгрузки изображения");
            }
        }
    }
}
Добавлено через 32 секунды
Элд Хасп, )) а imageSource откуда?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 18:03
Цитата Сообщение от ShmelVG Посмотреть сообщение
а imageSourceConverter - это откуда?
C#
1
       private static readonly ImageSourceConverter imageSourceConverter = new ImageSourceConverter();
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 18:07  [ТС]
Элд Хасп, тут ошибка Source = imageSource; Не удается неявно преобразовать тип "object" в "string". Существует явное преобразование (возможно, пропущено приведение типов).

Добавлено через 21 секунду
Элд Хасп, но явно преобразовать не получается

Добавлено через 37 секунд
C#
1
(string)imageSource;
так сделал)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 18:12
Цитата Сообщение от ShmelVG Посмотреть сообщение
2 ошибки в методе, вот модель
Ошибок валом!
В первую очередь это не правильная реализация свойств.
Нужны же поля где будут храниться значения свойств!
C#
1
2
        private ImageSource image;
        public ImageSource Image { get => image; set { image = value; OnPropertyChanged(); } }
И так для всех свойств.

Добавлено через 1 минуту
Цитата Сообщение от ShmelVG Посмотреть сообщение
тут ошибка Source = imageSource;
Лучше измените тип свойства Source со string на object.

Добавлено через 52 секунды
Цитата Сообщение от ShmelVG Посмотреть сообщение
throw new Exception("Ошибка закгрузки изображения");
Орфографическая ошибка загрузки

Добавлено через 1 минуту
Цитата Сообщение от ShmelVG Посмотреть сообщение
/// Сохранениt ссылки на источник картинки
Еще одна - Сохранение
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 20:03  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Нужны же поля
- блин, делал правильно, но потом что-то переклинило и сделал так(

Cпасибо)

Добавлено через 22 минуты
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Свойство IsSecondSelected типа bool - для привязки ToggleButton. В сеттере свойства должно быть управление свойством SelectedImage: False - ссылка на FirstImage, True - ссылка на SecondImage. И устанавливает у них свойство IsSelected.
- эту часть тоже не понял.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 /// <summary>
        /// Для привязки ToggleButton
        /// </summary>
        private bool _isSecondSelected;
        public bool IsSecondSelected
        {
            get => _isSecondSelected;
            set
            {
                if (SelectedImage)
                {
                    _isSecondSelected = value;
                }
                else
                _isSecondSelected = value;
                OnPropertyChanged();
            }
        }
 
        private bool _selectedImage;
        public bool SelectedImage { get => _selectedImage; set { _selectedImage = value; OnPropertyChanged(); } }
Вы хотите присвоить внутри св-ва который возвращает bool ссылку на ImageModify?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 20:06
Цитата Сообщение от ShmelVG Посмотреть сообщение
- эту часть тоже не понял.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 /// <summary>
        /// Для привязки ToggleButton
        /// </summary>
        private bool _isSecondSelected;
        public bool IsSecondSelected
        {
            get => _isSecondSelected;
            set
            {
                   _isSecondSelected = value;
                OnPropertyChanged();
                if (IsSecondSelected)
                     SelectedImage  = SecondImage;
                else
                     SelectedImage  = FirstImage;
            }
        }
 
        private bool _selectedImage;
        public bool SelectedImage { get => _selectedImage; set { _selectedImage = value; OnPropertyChanged(); } }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 20:10
Да, и подумал что для IsSecondSelected лучше тип boll?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 /// <summary>
        /// Для привязки ToggleButton
        /// </summary>
        private bool? _isSecondSelected;
        public bool? IsSecondSelected
        {
            get => _isSecondSelected;
            set
            {
                   _isSecondSelected = value;
                OnPropertyChanged();
                if (IsSecondSelected==null)
                     SelectedImage  = null;
                if (IsSecondSelected.Value)
                     SelectedImage  = SecondImage;
                else
                     SelectedImage  = FirstImage;
            }
        }
 
        private bool _selectedImage;
        public bool SelectedImage { get => _selectedImage; set { _selectedImage = value; OnPropertyChanged(); } }
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 20:18  [ТС]
Элд Хасп, если оставить так, (добавить bool? SelectedImage), то будет ошибка - Не удается неявно преобразовать тип "PhotoGluer.Models.ImageModify" в "bool?".

Добавлено через 27 секунд
она была у меня изначально когда я пытался сделать св-во)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 20:42
Цитата Сообщение от ShmelVG Посмотреть сообщение
сли оставить так, (добавить bool? SelectedImage), то будет ошибка - Не удается неявно преобразовать тип "PhotoGluer.Models.ImageModify" в "bool?".
Не обратил внимания сразу. Тип свойства SelectedImage должен быть ImageModify
C#
1
2
        private ImageModify _selectedImage;
        public ImageModify SelectedImage { get => _selectedImage; set { _selectedImage = value; OnPropertyChanged(); } }
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 20:44  [ТС]
Элд Хасп, вот на данный момент 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
114
115
116
117
118
119
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using PhotoGluer.ViewModels.Commands;
using PhotoGluer.Models;
using Microsoft.Win32;
 
namespace PhotoGluer.ViewModels
{
    class MainVM: OnPropertyChangedClass
    {
        private ImageModify _imageModify;
        private RelayCommand _loadCommand;
 
        #region Свойства
        /// <summary>
        /// Хранение картинки и действия
        /// </summary>
        private ImageModify _firstImage;
        public ImageModify FirstImage { get => _firstImage; set { _firstImage = value; OnPropertyChanged(); } }
        /// <summary>
        /// Хранение картинки и действия
        /// </summary>
        private ImageModify _secondImage;
        public ImageModify SecondImage { get => _secondImage; set { _secondImage = value; OnPropertyChanged(); } }
        /// <summary>
        /// Размер холста
        /// </summary>
        private double _width;
        public double Width { get => _width; set { _width = value; OnPropertyChanged(); } }
        /// <summary>
        /// Размер холста
        /// </summary>
        private double _height;
        public double Height { get => _height; set { _height = value; OnPropertyChanged(); } }
        /// <summary>
        /// Вычисление смещения между картинками
        /// </summary>
        private double _offsetLeft;
        public double OffsetLeft { get => _offsetLeft; set { _offsetLeft = value; OnPropertyChanged(); } }
        /// <summary>
        /// Вычисление смещения между картинками
        /// </summary>
        private double _offsetTop;
        public double OffsetTop { get => _offsetTop; set { _offsetTop = value; OnPropertyChanged(); } }
        /// <summary>
        /// Вычисление смещения между картинками
        /// </summary>
        private double _offsetAngle;
        public double OffsetAngle { get => _offsetAngle; set { _offsetAngle = value; OnPropertyChanged(); } }
        /// <summary>
        /// Для привязки ToggleButton
        /// </summary>
        private bool? _isSecondSelected;
        public bool? IsSecondSelected
        {
            get => _isSecondSelected;
            set
            {
                _isSecondSelected = value;
                OnPropertyChanged();
                if (IsSecondSelected == null)
                    SelectedImage = null;
                if (IsSecondSelected.Value)
                    SelectedImage = SecondImage;
                else
                    SelectedImage = FirstImage;
            }
        }
 
        private ImageModify _selectedImage;
        public ImageModify SelectedImage { get => _selectedImage; set { _selectedImage = value; OnPropertyChanged(); } }
 
 
 
        #endregion
 
        #region Команды
 
        #region Загрузить первую картинку 
 
        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 = ".jpg",
                FileName = "CogJobCam.jpg",
                Filter = "Рисунки|*.bmp;*.png;*.jpg;*.jpeg|Любые файлы|*.*"
            };
            bool? result = dlg.ShowDialog();
            if (result == true)
            {
                if (FirstImage == null)
                    FirstImage = (ImageModify)imageSourceConverter.ConvertFrom(dlg.FileName);
                else
                    SecondImage = (ImageModify)imageSourceConverter.ConvertFrom(dlg.FileName);
            }
        }
        #endregion
 
        #endregion
 
        #region Методы
 
        #endregion
    }
}
Свойство поправил, спасибо! Получается на 2 фото практически одинаковые команды(меняется только FirstImage/SecondImage)? Сдвиг фото во vm организовать как Вы показывали ранее? И поворот..у меня сейчас 8 кнопок, как можно сделать универсальную команду, получается мы из вью отправляем число на сколько повернуть, а команда поворачивает, мне казалось я и вовсе где-то видел что можно поворачивать из вью (но не думаю что так правильно, если конечно, я не ошибаюсь).
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 21:03
Цитата Сообщение от ShmelVG Посмотреть сообщение
практически одинаковые команды
Команда загрузки тоже универсальная. Загружает ту картинку которая указана в параметрах.
C#
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
        #region Загрузить картинку 
 
        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)
        {
            if (parameter is ImageModify img)
        {
 
            OpenFileDialog dlg = new OpenFileDialog()
            {
                DefaultExt = ".jpg",
                FileName = "CogJobCam.jpg",
                Filter = "Рисунки|*.bmp;*.png;*.jpg;*.jpeg|Любые файлы|*.*"
            };
            bool? result = dlg.ShowDialog();
            if (result == true)
             img.LoadImage(dlg.FileName);
         }
        }
        #endregion
Цитата Сообщение от ShmelVG Посмотреть сообщение
И поворот..у меня сейчас 8 кнопок, как можно сделать универсальную команду...
Команда поворота и сдвига "работают" с картинкой указанной в SelectedImage, если это не null.

Перечислите кнопки, а то у меня восемь не выходит. Или Вы ToggleButton считаете ?

Две кнопки - загрузки картинок
Одна кнопка - поворота выделенной
Четыре кнопки - смещения выделенной
И восьмая кнопка?
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 21:06
Забыл.
При выделении надо ещё устанавливать свойство IsSelected у выделенной картинки.
C#
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
        public bool? IsSecondSelected
        {
            get => _isSecondSelected;
            set
            {
                _isSecondSelected = value;
                OnPropertyChanged();
                if (IsSecondSelected == null)
                    SelectedImage = null;
                if (IsSecondSelected.Value)
                    SelectedImage = SecondImage;
                else
                    SelectedImage = FirstImage;
              FirstImage.IsSelected =  IsSecondSelected == false;
              SecondImage.IsSelected = IsSecondSelected == true;
            }
        }
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
02.05.2019, 22:31  [ТС]
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
FirstImage.IsSelected = *IsSecondSelected == false;
* * * * * * * SecondImage.IsSelected = IsSecondSelected == true;
- ругался, что пытались из дабл в бул преобразовать, исправил св-во на бул в модели
C#
1
2
private bool _isSelected;
        public bool IsSelected { get => _isSelected; set { _isSelected = value; OnPropertyChanged(); } }
У меня во view, в правой части где ввод/вывод, теперь так (сверху вниз):

Смещение X,Y
ниже 2 кнопки фото 1 и фото 2, напротив текстблок для вывода положения,
ниже текстблок Смещение и текстблок для смещения

Потом "Повернуть", всего в этом блоке 8 кнопок,
две кнопки в ряду:
лево 1(град), право 1(град),
лево 10(град), право 10(град),
лево 45(град), право 45(град),
лево 90(град), право 90(град),
пока там текст, позже хотел бы найти (или сделать) картинку будто поворот на указанный градус,

и ниже 4 кнопки так и остались влево/вправо/вниз/вверх (тоже хотел бы найти или сделать картинку с направлением указателя), было бы очень удобно управлять ещё и стрелками с клавы.

Итого:
кнопок - 14.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16159 / 11279 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
02.05.2019, 22:37
Цитата Сообщение от ShmelVG Посмотреть сообщение
мне казалось я и вовсе где-то видел что можно поворачивать из вью (но не думаю что так правильно, если конечно, я не ошибаюсь).
Конечно можно.
Свойство Angle привязывать не к свойству VM, а к TextBox напрямую.
И смешение также делать. Ввести TextBox'ы для Left и Top.
Другой вопрос - а насколько это будет удобно? Без кнопок, просто вводить значения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2019, 22:37

Где располагать логику приложения, когда используем паттерн mvvm?
Изучаю wpf и паттерн mvvm. Никогда не задумывался, где что располагать, я считал (считаю пока), что представление - это пользовательский...

Склейщик
Добрый день. Моя цель сделать так называемый &quot;склейщик&quot;. На первом скрине, код моей программы. На втором пример ее работы с 1 строкой. На...

MVVM и динамическое создание контролов
У меня есть БД в MS ACCESS, в ней 10 таблиц, необходимо сделать гриды с разными контролами для заполнения и изменения полей каждой из...

MVVM и создание диалоговых окон
Приветствую вновь прибывших. В приложении нужно открыть диалоговое окно пока решил это таким способом: В VM главного окна по...

Создание интерфейса в паттерне MVVM
Доброго времени суток, есть вопрос: разрабатываю приложение с помощью данного паттерна и получается так, что в приложении в разных частях...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru