|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||||||
UWP DragPositionBehavior при быстром перемещении курсора теряется его позиция21.11.2021, 17:34. Показов 4790. Ответов 55
Метки нет (Все метки)
Я написал простой Behavior для того, чтобы перемещать элемент внутри Canvas.
Элемент перемещается, всё хорошо, пока я не захватываю элемент за край. В таком случае елемент легко может потерять текущее местоположение курсора, но OnElementPointerReleased не сработает, а следовательно и не сработает отписка от OnMove. Это значит, что когда курсор покидает элемент, при том, что до этого я на него нажал, элемент не видит куда я перемещаю курсор, не видит отжал ли я кнопку мыши. Если я верну курсор мыши обратно в элемент, он продолжит функционировать должным образом.
BaseElement нужен в тех случаях, когда у меня Parent может быть этот же элемент. Например когда там будет Grid в Grid'е.
0
|
|||||||||||
| 21.11.2021, 17:34 | |
|
Ответы с готовыми решениями:
55
При быстром перемещении окон и открытии меню приложение тормозит ubuntu Позиция курсора и его форма Выделение при перемещении курсора в StringGrid |
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||
| 10.12.2021, 00:44 [ТС] | |||
|
Элд Хасп, у меня есть "прямоугольник". Прямоугольник содержит элементы. Когда я перемещаю именно этот прямоугольник -- всё хорошо. Когда я перемещаю этот прямоугольник за TextBlock -- у меня не "отжимается кнопка". То есть прямоугольник болтается с курсором мыши. Добавлено через 1 минуту
0
|
|||
|
Модератор
|
||
| 10.12.2021, 00:57 | ||
|
Вы используете мою? Тогда ваши прямоугольники это ContentPresenter. И вашем Behavior надо подписываться на его RoutedEvent, а не на прокси свойства. И вы добавили AP-свойства как я вам писал? Или по прежнему напрямую управляете трансформацией?
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||
| 10.12.2021, 01:09 [ТС] | |||||||
|
Элд Хасп, да, реализация Ваша.
:
2. Также не понимаю чем Вам не нравится это предложение. Да, оно неполное, ведь если там будет не TranslateTransform -- будет баг -- это поправимо. Но как я нимаю я вообще неправильно сделал всё.
0
|
|||||||
|
Модератор
|
|||||||||||||
| 10.12.2021, 12:01 | |||||||||||||
|
Наверное, нужно ещё что-то устанавливать в Студию. Неохота мне возиться, поэтому показывать буду на своём Репе, а вы уже сами портируйте его в своё решение. А вы присоединяете Behavior (и следовательно перемещаете) Border (или другой элемент) внутри него, выводя его за его границы. Ничего не смущает? Я добавил (фиксация 964c602b) AP-свойство:
1
|
|||||||||||||
|
Модератор
|
||||||
| 10.12.2021, 12:43 | ||||||
|
limeniye, хотел продолжить дальше, но споткнулся о привязку свойств Canvas.
Не могу понять почему не работает такой код:
Как появится - подключусь.
1
|
||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||||
| 10.12.2021, 19:31 [ТС] | |||||||||
|
Я его недели 2 не мог собрать. Добавлено через 27 минут Это ещё хорошо, что он хотя бы уже поднастроен. Из "коробки" он не запустится даже у меня. Есть свои нюансы. 2.1 Нужно установить расширение Uno. Visual Studio -> Extentions -> Manage Extentions -> "Uno Platform Solution Templates". 2.2 Или по ссылке тут. 3.1 Установить: Universal Windows Platform; ASP.NET and web. 3.2 В инструкции по установке ещё сказано про Mobile development with .NET (Xamarin) , но это для старых версий, скорее всего он и не нужен вовсе для новых. Тем не менее я установил (на всякий случай). Добавлено через 4 минуты Также, нужно установить Windows SDK в Visual Studio Installer'е. Для запуска UWP -- этого должно хватить. Также, скорее всего, Вам ещё нужно будет лазить в настройки, чтобы включить плюшки, по типу "Hot Reload". Но на данном этапе будет чудо, если у Вас хотябы просто сбилдится проект. Добавлено через 16 минут Поэтому я задавал его следующим образом:
0
|
|||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 10.12.2021, 19:32 [ТС] | |
|
0
|
|
|
Модератор
|
||
| 10.12.2021, 19:41 | ||
|
А через привязки в стилях они работаю. Ещё одна особенность за которую я "люблю" UWP. В WPF такое задание стиля позволяет позиционировать элементы в ItemsControl. Пока разбирался с этим выяснилось, что в UWP еще нет x:Array и x:Static. Их же элементарно реализовать! Почему нет? Просто Причину понял только потому, что более-менее знаю WPF.
1
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 10.12.2021, 19:45 [ТС] | |
|
Элд Хасп, Да, с течением эксплуатации я уже такого повидал в достатке, но это ещё цветочки. Если бы Вы попробовали Xamarin ... это вообще не платформа а сплошной костыль. Там и половину нет того, что хотябы есть в UWP.
0
|
|
|
Модератор
|
|||||||||||||||||||||||||||||||||||||||||||
| 10.12.2021, 22:50 | |||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено limeniye как решение
РешениеБез обид, но вы взялись за "изготовление мебели из досок, ещё не умея собирать её из комплекта Икеа". Так как нормальных сеттеров в UWP нет, пришлось привязки создавать через код. Для этого добавил свойства в инициализирующий контейнер.
Теперь без проблем можно перемещать кнопки:
1
|
|||||||||||||||||||||||||||||||||||||||||||
|
Модератор
|
|
| 11.12.2021, 11:49 | |
|
limeniye, кстати, в текущей реализации, можно всю логику перенести в AP-свойство и отказаться от Behavior.
Это не сложно, но муторно. Поэтому не сделал. Когда будет нечего делать - перенесу.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||
| 12.12.2021, 21:37 [ТС] | |||||||
|
Доброго времени суток, Элд Хасп.
Изучил Ваш код. В принципе выглядит логично и очень интересно. Есть пара вопросов: 1. Больше всего меня заинтересовал аттрибут [Bindable]. Что-то о нём вообще ничего не нашёл; 2. Я заметил, что Вы поднимаете событие в том же типе, в котором оно находится, чтобы задать Binding. Тут совсем не понял зачем. По своей сути, если Вы хотели добиться передачи информации через другой поток -- можно было использовать Task. Меня заинтересовал этот подход.
Там написано, что это для анимаций, стилизаций и т.д., но что-то не представлю как это. 4. Касательно переноса на AttachedProperty. Вы сказали следующее: - удалить проверку и добавление в Behavior-лист; - удалить интерфейс IBehavior; - метод Detach переименовать в ~DragPositionBehavior(); - метод Attach переименовать в Initialize какой-то; - Initialize вызывать при изменении свойства DragPositionProperty. Но уверен что всё куда сложнее.
0
|
|||||||
|
Модератор
|
|||||
| 12.12.2021, 22:53 | |||||
|
Потом ошибку нашёл в другом месте, но атрибут оставил. Это создание привязок. Понадобилось из-за того, что в UWP сеттеры не поддерживают привязки. Переписывать реализацию самих сеттеров - это слишком громоздко. Пошёл по более простому пути. В WPF этого не понадобилось бы. По сути надо всю логику реализовать через метод DragPositionChanged. Параметр DependencyObject d - это и есть DependencyObject associatedObject Сам Behavior, в таком случае, не нуждается в IBehavior, а наследовать его лучше от Freezable.
1
|
|||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 13.12.2021, 01:04 [ТС] | ||
Добавлено через 1 минуту Я попробую изменить Behavior на AP.
0
|
||
|
Модератор
|
|||
| 13.12.2021, 01:46 | |||
|
А DependencyObject не получает. Поэтому для работы привязок с источником по умолчанию нужен Freezable. По сути базовая реализация DependencyObject довольно ущербна и напрямую его практически невозможно использовать (как базовый класс). Возможно в UWP часть функционала Freezable переместили в базовый DependencyObject - это надо тестить. Потом покажете результаты. Добавлено через 7 минут P.S. С DependencyObject, вообще, какая-то странная история. Сначала они делаю почти все его члены internal. Потому какуую-то их часть раскрывают в публичные во Freezable. Но основная часть элементов (в том числе все UI элементы) наследуются от DependencyObject и работают с ним через internal члены. Поэтому расширение WPF элементов очень часто наталкивается на значительные трудности. И это происходит в очень многих типах. Допустим, иногда есть необходимость получить конвертацию типов эквивалентную (чтобы обеспечить повторяемость) конвертации в Binding. И есть тип в .Net который эту конвертацию обеспечивает DefaultValueConverter. Но, блин!, он internal! Зачем его спрятали - одному богу известно.
1
|
|||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||
| 13.12.2021, 11:57 [ТС] | ||||||||
|
Я пытаюсь сделать следующим образом:
0
|
||||||||
|
Модератор
|
|||
| 13.12.2021, 12:06 | |||
|
Этим типом представляется элемент ItemsControl. Именно он находится на Canvas и именно его и нужно перемещать. А Border или Button (то что вы задаёте в ItemTemplate) - это содержимое (визуальное) этого ContentPresenter. Добавлено через 50 секунд По выложенному здесь не пойму что вы делаете.
0
|
|||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 13.12.2021, 12:07 [ТС] | |
|
Элд Хасп, имею ввиду, что я ожидал увидеть такой же тип, куда оно и приходит. Но как я понял AttachedProperty, в этом плане, работают немного по-другому.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|||||||
| 13.12.2021, 12:12 [ТС] | |||||||
0
|
|||||||
| 13.12.2021, 12:12 | |
|
Вызвать событие при перемещении курсора Событие при при перемещении курсора мыши в уже выпавшем списке ComboBox Процессор нагружается при перемещении курсора мыши Word: запускать макрос при перемещении курсора
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|