Re[2]: Design-Time Support в Compact Framework
От: Beliar  
Дата: 29.01.10 10:37
Оценка:
Нашел решение.

Проблема была в том, что я указал не всю информацию о сборке с редактором. Хотя параметры Culture, Version и PublicKeyToken являются в большинстве случаев необязательными и используются, только если имеется две сборки с одинаковыми именами, в данном случае без них работать не будет.

И того вот краткая последовательность действий по добавлению к контролу своего редактора свойств:
1. Реализуем контрол
2. Добавляем в сборку с контролом *.xmta файл с Design-Time атрибутами.
3. Указываем в этом файле редактор, используемый для свойства нашего контрола. Получается что-то вроде этого:

<?xml version="1.0" encoding="utf-16"?>
<Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd">
    <Class Name="Transparency.Controls.TransparentPanel">
        <DesignTimeVisible>true</DesignTimeVisible>
        <Designer>
            <Type>System.Windows.Forms.Design.ParentControlDesigner, System.Design</Type>
        </Designer>
        <Property Name="Image">
            <Category>A</Category>
            <Editor>
                <Type>Singularis.Design.ImageFileEditor, Singularis.Design, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2157e22d4cb3b52d</Type>
                <BaseType>System.Drawing.Design.UITypeEditor, System.Drawing</BaseType>
            </Editor>
            <TypeConverter>Singularis.Design.ImageFileTypeConverter, Singularis.Design, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2157e22d4cb3b52d</TypeConverter>
        </Property>
        <Property Name="BackgroundImage">
            <Browsable>false</Browsable>
        </Property>
    </Class>
    <Class Name="Transparency.Controls.BaseTransparentControl">
        <DesignTimeVisible>false</DesignTimeVisible>
    </Class>
</Classes>

4. Создаем сборку для десктопа и описываем в ней свой редактор
5. Переопределяем в редакторе методы EditValue, GetEditStyle (определяет как будет отображаться редактор — выпадающим оном, модальным диалогом и или простым текстбоксом), GetPaintValueSupported (в большинстве случаев можно просто вернуть false)
6. Компилируем сборку с редактором
7. Регистрируем сборку с редактором в GAC
8. Кидаем наш кастом контрол на форму и наслаждаемся кастом редактором

P.S. Редактор, конверторы типов и прочие вкусности WinForms дизайнера загружаются при первом обращении. Так что если вы перекомпилировали сборку с редактором, придется перезапустить тот экземпляр VS, который его использовал, иначе работать будете со старой версией!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.