Перетаскивание элементов управления на элементы управления в конструкторе Visual Studio WPF - PullRequest
0 голосов
/ 07 декабря 2011

Я привык к конструктору Windows Forms, и теперь впервые использую дизайнер WPF в Visual Studio 2010. Я прочитал, что вы можете просто перетащить нужные элементы управления в форму. В моем случае элементы управления, перетаскиваемые из панели инструментов, не выпадают, как я ожидал.

Два примера: некоторые элементы управления должны выполнять специальные действия, такие как GridSplitter привязка к ближайшей линии сетки при удалении. Но мой просто остается серым прямоугольником в той позиции на Сете, куда я его бросил. Я также использую элемент управления WPF Ribbon (в окне RibbonWindow), и они говорят, что перетаскивая RibbonGroup на ленту, добавляет его к ленте. Но мой помещается в нижележащую сетку, где я ее отбросил, независимо от того, какой элемент управления я выбрал, прежде чем сбросить элемент управления.

Я искал в Интернете, но нашел только ответы на вопросы о перетаскивании в запущенных приложениях WPF. Я неправильно понимаю поведение дизайнера WPF или здесь есть реальная проблема?


Чтобы воспроизвести: создайте новый проект WPF, разделите существующую сетку на две, щелкнув верхнюю панель сетки. Перетащите GridSplitter на одну из ячеек. Мой результат: enter image description here

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Как вы обнаружили, дизайнер WPF Visual Studio действительно отличается от дизайнера Windows Forms.

Когда вы перетаскиваете элемент в конструктор или добавляете его, дважды щелкнув элемент на панели инструментов, дизайнер создает его с размером по умолчанию. В вашем случае размер составляет 100 на 10 пикселей. Попробуйте с другими элементами управления, вы увидите, что каждый из них имеет свой размер.

Когда вы перетаскиваете в конструктор, местоположение определяется местоположением вашей мыши, когда вы отпускаете левую кнопку мыши. Поскольку вы перетаскиваете в сетку (которая не поддерживает абсолютное позиционирование), местоположение достигается путем установки свойства margin в разделителе сетки. Для вашего примера, конечно, вы не хотите устанавливать поля или размер. К сожалению, изменить это поведение невозможно, это значит, что вам нужно постоянно удалять настройки полей и ширины-высоты.

1 голос
/ 07 декабря 2011

Дизайнер WPF в VS2010 немного неуклюжий. Expression Blend был бы лучшим выбором для дизайна WYSIWYG (или следующей, в настоящее время не выпущенной, версии VS, которая интегрирует Blend в VS). XAML - это система макетов, основанная на сетке, поэтому добавляемые элементы управления будут стремиться привязываться к любому контейнеру, в котором они находятся. Иногда это может действовать не так, как хотелось бы, если дизайнер автоматически применяет свойства, такие как Border и Margin. Если вы удалите их и правильно установите свойства высоты, ширины и выравнивания, разделитель и разделитель должны отображаться правильно.

Также VS2010 иногда кажется запутанным из-за того, где вы на самом деле добавляете элемент управления. Самое простое решение для промежуточного периода - использовать разделенное представление и вырезать / вставить XAML для элемента управления, который вы добавили в элемент управления содержимым / контейнером, в который вы намеревались его включить.

Всякий раз, когда я застреваю с VS2010, я просто вручную кодирую весь свой XAML. Я считаю, что это намного быстрее, чем использование дизайнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...