Я помещаю строку (назовем ее строкой 1) на холст и прикрепляю к ней мыши, мышь, мышь и мыши. Затем создается другая строка (строка 2) с присоединенными к ней событиями. Все события отлично работают, когда выбрана любая из линий. По какой-то причине, когда первая строка, которая была создана, перетаскивается и освобождается по второй строке, созданной, линия не выделяется на холсте, однако она остается приклеенной к указателю мыши, пока другой клик не будет удален со второй строки. Эта проблема возникает, когда самые ранние созданные строки перетаскиваются по более новым строкам, а не наоборот (проблема возникает, когда линия 1 перетаскивается и освобождается в строке 2, но не наоборот, или строка 1 над 2 и 3, а строка 2 по строке 3 и т.д. я не знаю, что код может помочь в отношении решения этого вопроса, будет ли какие-либо предложения, или, возможно, сталкивались с подобной проблемойВыбор и снятие перекрытия графики в silverlight
ответ
причина наблюдаемого поведения довольно легко выводится:
Все элементы в Panel
имеют неявный z-порядок, который вступает в силу, если для элемента en не задано свойство ZIndex
. Ранее добавленные элементы имеют более низкий z-порядок, чем более поздние добавленные элементы (разметка xaml - это синтаксический анализ от вершины до бо ttom и элементы, которые встречаются ранее, добавляются ранее).
Теперь, если вы начнете перемещать элементы вокруг, а два элемента перекрываются, z-порядок все еще эффективен. поэтому ваша ранее добавленная строка будет обрабатываться так, как если бы она была физически ниже другой строки, и все события мыши перейдут к самой верхней строке в z-порядке. поэтому событие MouseUp не принимается вашим перемещенным элементом, и оно все еще приклеивается к указателю мыши, пока вы не отталкиваете мышь от перекрывающейся области и не отпускаете мышь снова.
Я могу придумать несколько способов решить эту проблему:
Вероятно, проще всего будет просто установить явное ZIndex
на элементе, как только вы выбираете его, когда вы двигаете его вокруг всегда будет на поверх всех других элементов, и когда вы отпустите его в любом месте, вы снова можете очистить ZIndex. Некоторые примеры кода, чтобы дать вам идею:
private void OnElementSelected()
{
// todo: maybe we need to store the previous zindex value and re-assign it later
// to prevent it from getting lost
Canvas.SetZIndex(this, Int32.MaxValue);
}
private void OnElementReleased()
{
this.ClearValue(Canvas.ZIndexProperty);
// todo: maybe re-assign stored z-index value
}
Альтернативное решение будет иметь прозрачный MouseEventObserver помещается на весь ваш Canvas
который активизируется, как только вы выбираете элемент, то порядок ваших элементов Безразлично» .
Редактировать
Хорошего факт (многие разработчики, вероятно, не знает) о вложенном свойстве Canvas.ZIndex
: он работает для каждого типа панели, а не только для Canvas
. Таким образом, вы можете даже указать z-порядок элементов внутри Grid
с Canvas.ZIndex
.
- 1. Выбор и снятие радиокнопки
- 2. Выбор и снятие сетки в раскрывающемся меню
- 3. Графики перекрытия времени и времени Excel 2013
- 4. Графики и графики на основе Silverlight в приложении asp.net 3.0
- 5. WxPython, радио кнопка выбор/снятие и wx.RB_GROUP
- 6. СНЯТИЕ-ВЫБОР не запускается в ABAP?
- 7. Выбор между WPF и Silverlight
- 8. Выбор диапазона дат без перекрытия
- 9. Ошибка при добавлении данных в графики Silverlight?
- 10. Выбор фотографий и снятие с камеры на iPad
- 11. jQuery снятие флажка и повторная выбор флажка программно
- 12. Silverlight Listbox выбор ItemTemplate
- 13. Выбор привязки Silverlight?
- 14. Графики объектов Entity Framework 4 + Silverlight
- 15. Отключение и снятие радиообъектива
- 16. Что представляют собой самые красивые графики Silverlight?
- 17. Выбор областей перекрытия/касания (двоичные изображения, Matlab)
- 18. Избегайте перекрытия ярлыка элементов во временных рядах 1D-графики (JFreeChart)
- 19. Графики и графики на iPhone
- 20. Android-2D-игра, лучший выбор для графики?
- 21. Пиксельная дилемма: выбор правильной графики API
- 22. Предотвращение перекрытия перекрытия в RelativeLayout
- 23. Silverlight RichTextBox Отключить выбор мыши
- 24. Выбор или снятие флажков из уникальных столбцов с помощью JQuery
- 25. ArangoDb Визуализация веб-графики - выбор атрибутов узла
- 26. Dojo: Программный выбор/снятие флажка с улучшенной сеткой
- 27. Cakephp 2.5 и снятие HTML
- 28. Очистка данных и снятие скобок
- 29. Смена ветвей и снятие старых
- 30. Снятие и»от результата cursor.fetchall()
Большое спасибо за ответ :) В моем случае каждому элементу уже задан явный z-индекс, когда он создан, всегда одно значение больше предыдущего элемента, и все же эта проблема по-прежнему сохраняется. Я попытался изменить z-индекс холста на мышь и мышь, так как у меня есть свойство, чтобы показать, перетаскивается элемент или нет, однако это не решило проблему. Может быть, есть еще одна проблема? И спасибо за ваше терпение. – Maeglin77
Неважно, присваиваете ли вы явное и последовательно увеличиваемое свойство Z-Index или действует ли неявный z-порядок. Всякий раз, когда вы перемещаете ранее добавленный элемент вокруг него, он неизбежно будет лежать ниже тех, которые были добавлены позже. Поэтому вы должны убедиться, что выбранный и перемещенный элемент имеет самый высокий из всех z-индексов, существующих на данный момент.И я не понимаю, почему манипулирование z-индексом холста должно каким-либо образом решить проблему. – Martin
Спасибо большое за ваше предложение! :) – Maeglin77