WPF и панорамирование средств управления и разметок Silverlight и возможности масштабирования

Я хотел бы понять, общие требования для расположения WPF/Silverlight для того, чтобы позволить реализовать pan&zoom (перетащите и масштабируйте), функции. Я не имею в виду pan&zoom для изображения, но для общей страницы (окно) расположение (или часть его) с некоторыми средствами управления.

Какие функции расположения и какие функции используемых пользовательских элементов управления делают расположение зафиксированным и pan&zoom невозможный?

6
задан rem 14 January 2010 в 16:39
поделиться

4 ответа

Общее правило

с небольшим количеством исключений все в WPF можно пройти, увеличить, повернутую, растянутую и т. Д. К контенту вашего сердца. Это включает в себя единые элементы управления, такие как кнопка, соединения, такие как ListBox, а контейнеры, такие как StackPanel.

Исключения

Вот исключения:

  1. Если вы используете Adorner и ваш AdornerDecorator, находится за пределами PARNED / увеличенной зоны, то адорры, прикрепленные к вашей паненту / увеличенной зоне, но не увеличены. Решение состоит в том, чтобы поставить дополнительный AdornerDecorator внутри Panban / Zoomed область.

  2. Если вы используете всплывающее окно, он будет отображаться в Panbance / Zoomed расположенном его размещенииTarget, но он не будет масштабироваться. Он также не будет двигаться, так как вы сковородеете область, содержащую его размещение (в основном, он сидит на собственной поверхности выше целевого управления). Чтобы обойти это, используйте холст с нулевым размером с высоким Z порядок, когда вы хотите, чтобы что-то появилось в зоне Zoom / Pan.

  3. Любая контекстная, которую вы определяете, будет отображаться внутри всплывающего окна, поэтому элементы меню будут отображаться нормальный размер, даже когда область, которую вы нажали, увеличивается или выходит. Из-за природы контекстного меню это, вероятно, желательно поведение. Если нет, вы можете обернуть элементы меню в поле Viewbox и завяжите увеличение масштабирования в масштаб вашей основной области.

  4. Ваши всплывающие подсказки будут отображаться нормальный размер, даже если интернет-интерфейс выступает или увеличен. То же самое решение, что и для контекстно.

  5. Если вы использовали интеграцию WINFORMS для интегрированного устаревшего управления WinForms и UI, они не будут должным образом панорамировать, масштабировать и зажимать в определенных ситуациях. Существует продвинутая техника для работы вокруг этого, где вы реализуете функцию управления WinForms, а затем используете BitBLT или аналогичную копию изображения в ваше окно как изображение, а также пересылающие щелчки мыши и нажатия клавиш в окно незаменимого экрана. Это много работы, хотя.

  6. Если вы обходите WPF и напрямую используете GDI + или DirectX или используйте Win32 HWNDS для отображения содержимого или пользовательского интерфейса, что содержимое или пользовательские интерфейсы не будут должным образом высказаны, увеличены или обрезаны в окно, если вы не сделаете это самим в своем интерфейсе.

Окончательные примечания

  • Хороший WPF UI всегда использует такие панели, как Grid, DockPanel, и т. Д. Для гибкой выложки элементов управления, чтобы они автоматически приспосабливались к размерам контейнера, а не использовать фиксированные размеры и положения. Это также верно для внутреннего содержимого вашей области PAN / ZOOM, но есть исключение из этого правила: внешний элемент в вашей области PAN / ZOOM должен иметь указанный размер. В противном случае то, что будет определять, что эта область находится, прошедшая / увеличенная?

  • Простой способ реализации возможностей PAN / ZOOM - это настроить рендерингТрансформ формы внешнего элемента управления в вашей области PAN / ZOOM. Существует много разных способов реализации элементов управления для панорамирования и масштабирования, например, вы можете использовать кнопки панели инструментов и ползунки, полосы прокрутки, колесики мыши, пробел + перетащите на сковороду, перетягиваемые площади сама по себе, или любая комбинация из них. Какой бы интерфейс вы выберете, просто обновляйте RenderTransform соответствующим образом из кодового позади, и вы добруетесь.

  • Если ваш выбранный механизм панорамирования является полосами прокрутки, вы можете использовать ScrollViewer и использовать только RenderTransform для увеличения.

  • Убедитесь, что вы устанавливаете отсечение на области PAN / ZOOM. В противном случае, если вы уменьшаете масштабные или панорамирование со стороны стороны, они все равно будут видны за пределами области Pan / Zoom.

9
ответ дан 8 December 2019 в 16:03
поделиться

Каждый раз при добавлении уникального ключа в таблицу базы данных добавляется некластеризованный индекс. Кластеризованные индексы находятся в первичных ключах и физически сортируют данные в таблице по столбцам. Каждый некластеризованный индекс создает количество внешних по отношению к таблице листков, отсортированных по уникальному ключу. Это позволяет выполнять гораздо более последовательный поиск по уникальному ключу, поскольку полное сканирование таблицы больше не требуется. При каждой вставке, обновлении или удалении строки из таблицы сервер должен вернуться назад и обновить все листья, внешние по отношению к таблице. Обычно это не проблема, если у вас есть небольшое количество уникальных ключей, но когда у вас много, это может замедлить время отклика. Для получения дополнительной информации см. статью Википедии здесь . У Msdn также есть хорошая статья.

-121--4780337-

Можно попытаться установить флаг окна, чтобы включить Qt:: Dialog (добавлено полужирным шрифтом):

Указывает на то, что виджет представляет собой окно, которое должно быть оформлено как диалоговое окно (т.е. обычно кнопки в строке заголовка не максимизируются или не сворачиваются). Это тип по умолчанию для QDialog. Если вы хотите использовать его в качестве модального диалога, он должен быть запущен из другого окна или иметь родительский элемент и использоваться со свойством QWidget:: windowModality. Если сделать его модальным, диалоговое окно не позволит другим окнам верхнего уровня в приложении получать какие-либо входные данные. Мы ссылаемся на окно верхнего уровня, которое имеет родительский элемент в качестве второстепенного окна.

Я не знаю, что произойдет, если вы попытаетесь установить оба Qt:: Dialog и Qt:: Tool , но, возможно, стоит изучить.

-121--4585780-

Одним из действительно простых способов реализации увеличения XAML является использование Silverlight ViewBox. Это приводит к увеличению XAML, а не пикселов. Можно задать растяжение, которое будет использоваться, и на его основе будет масштабироваться ViewBox (Заливка, Нет, Однородный и т.д.). Есть несколько замечательных записей в блоге Viewbox в Интернете, если вы ищете Silverlight + Viewbox в Google.

Панорамирование легко выполняется с помощью аналогичного механизма перетаскивания, и есть также многочисленные сообщения в блоге, доступные через Google. Просто равносильно захвату событий MouseDown, MouseMove и MouseUp.

1
ответ дан 8 December 2019 в 16:03
поделиться

Используйте многосчетную область или область холста, и поместите все, что вам нужно для панорамирования и масштабирования в нем

<Canvas x:Name="panZoomPanel" Background="Transparent">
</Canvas>

в использовании кода. Сделайте трансляционную форму и совокупность в трансформационном группе к кастрюлю и увеличению

Ознакомьтесь с другими Так что пост или этого пример или это

3
ответ дан 8 December 2019 в 16:03
поделиться

В целом вы можете лечить любой композитный набор элементов пользовательского интерфейса такими же, как вы относитесь к одному Uielement, поэтому случай изображения не отличается от того, чем для всего приложения. Лучший способ обрабатывать масштабирование на основе пользовательского ввода (в отличие от автоматического масштабирования, который делает ViewBox) применяет ScaleTransform. Это может быть установлено на родительском элементе высокого уровня, как сетка в корне планировки окна. Для панорамирования вы можете комбинировать в трансплатетрансанзе или в некоторых случаях использовать ScrollViewer, чтобы обрабатывать перемещение вида содержимого.

2
ответ дан 8 December 2019 в 16:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: