![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
oldshaman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.6.2008 Репутация: нет Всего: нет |
Всем здравствуйте.
В WPF новичек, потому прошу помочь советом. Если кто видел 1С (и 7.7, и 8.х), там есть такой контрол - ПолеВвода. Смысл в том, что мы в режиме проектирования (но можно и потом в рантайме) устанавливаем ему некий тип значения - например, число, строка, дата, или ссылку на имеющийся в приложении класс (Документ.РасходнаяНакладная, Справочник.Контрагенты) и тп, а он, соответственно, при нажатии на кнопку выбора, либо показывает маленький калькулятор, календарик, либо открывает форму выбора ссылочного класса с гридом. То есть в общем, в упрощенном варианте, без выбора типа значения в рантайме, TextBox+Button. Я сделал наследника от Control, два DependancyProperty - ValueType с типом Type (или лучше string?) и Value (object), ControlTemplate в XAML, команду ButtonSelect, которую привязал к кнопке в шаблоне, эта команда вызывает маршрутизированное событие BeginSelect, на которое клиентский код, использующий контрол, может подписываться прямо в XAML. Еще надо объявить, конечно, делегат для указания метода, как, собственно, контрол должен действовать в зависимости от установленного типа значения. А может, прямо в нем через switch-case сделать жесткую привязку для простых типов, а для ссылочных, отображающих сущности, использовать шаблон метода, который искать в сборке по имени класса? В принципе, по MSDN и книжке Мэтью Макдональда разобраться вполне можно, но не хотелось бы лишних граблей, поэтому вопрос: я вообще в правильном направлении двигаюсь? |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Насколько я понимаю, Вам необходимо создать контрол, который будет умело комбинировать готовые контролы. В этом случае наследоваться удобнее от UserControl (Add -> New Item -> UserControl).
|
|||
|
||||
oldshaman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.6.2008 Репутация: нет Всего: нет |
Нет, Idsa, не совсем так.
Я пробовал сначала делать UserControl, но в MSDN перечислены ограничения такого подхода, одно из них - поддержка тем и настройка элемента через ControlTemplate. Да и логически это все-таки не комбинация конрролов, а другой элемент, то есть, в соответствии с абстракцией WPF об отделении логики от представления - это нечто, что умеет принимать тип класса в качестве типа значения, а потом хранить ссылку на какой-то объект этого типа. Ну и соответственно, как-то отображать значение, на которое ссылается. Кнопка и текстбокс - просто самая простая и очевидная реализация такой задачи. В принципе, можно, конечно, взять и положить на форму эти элементы, и на каждый из них повесить соответствующие обработчики. Но как-то это совсем грубо, хочется создать именно контрол, потому что это во-первых, законченная логическая сущность, а во-вторых, просто привык в 1С такими штуками пользоваться. Есть, например, объект Order, у него есть поле Customer, я на форму кидаю такой контрол, говорю в XAML, что тип значения у него - class Customer, а он 1) при начале выбора (это может быть щелчок по нему, HotKey или начало ввода в TextBox, подразумевающее автозаполнение по первым символам) открывает форму (окно, список, грид, в общем коллекцию из базы) со списком этих клиентов, обрабатывая выбор в этом списке; 2) как-то понятно для пользователя отображает выбранное значение, например, с помощью Customer.ToString(). Наверное, я как-то непонятно объясняю :( |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
oldshaman, на самом деле тут проще всего для типов .NET иметь какие-то предопределённые значения, а для пользовательских типов ввести атрибуты.
-------------------- СУВ, Partizan. |
|||
|
||||
oldshaman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.6.2008 Репутация: нет Всего: нет |
Вот, нарисовал скриншоты, может, так проще будет понять, что от этого контрола требуется.
Присоединённый файл ( Кол-во скачиваний: 21 ) ![]() |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
oldshaman, UserControl - это то, что вам нужно
![]() -------------------- СУВ, Partizan. |
|||
|
||||
fabio25 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 4.4.2009 Репутация: нет Всего: нет |
посмотри UZTO 'www.UZTO.NetDec.uz'
Там InputControl |
|||
|
||||
oldshaman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.6.2008 Репутация: нет Всего: нет |
fabio25, спасибо за ссылку!
С контролом-то я уж давно разобрался, а вот сама эта система узбекская - офигеть! Такое ощущение, что они не просто передрали с 1С всю систему, но даже и специально старались скопировать то, что в .Net в принципе сделать можно гораздо лучше. |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
Про какую систему речь? Я, кстати, сейчас (вот прямо сейчас ![]() |
|||
|
||||
fabio25 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 4.4.2009 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |