Design-Time Support в Compact Framework
От: Beliar  
Дата: 25.01.10 09:34
Оценка:
Доброго времени суток!

Столкнулся с такой проблемой. Разрабатываю свой контрол (требуется возможность загрузки png с прозрачностью). В нем имеется свойство моего типа — AlphaImage. Стандартный Design-Time редактор для изображений использовать нельзя — загрузка png стандартными средствами гробит альфаканал (ну во всяком случае таково было мое исходное предположение ).
За сим написал свой простейший редактор AlphaImageEditor (вызывает диалог открытия файла и загружает изображение):

public class AlphaImageEditor : UITypeEditor
{
    private OpenFileDialog openDialog;

    public override object EditValue(ITypeDescriptorContext context,
                IServiceProvider provider, object value)
    {...}

    public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    {
        return UITypeEditorEditStyle.Modal;
    }

    public override bool GetPaintValueSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override void PaintValue(PaintValueEventArgs e)
    {
        Graphics graphics = e.Graphics;
        AlphaImage img;
                    
        if (e.Value != null)
        {
            img = (AlphaImage)e.Value;
            img.Draw(graphics, e.Bounds);
        }

        graphics.DrawRectangle(Pens.Black, e.Bounds);
    }

    protected virtual AlphaImage LoadFromStream(Stream stream)
    {
        return AlphaImage.CreateFromStream(stream);
    }
}


Далее прописал этот редактор свойству моего контрола в *.xmta файле:
<?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>
        <Property Name="Image">
            <Browsable>true</Browsable>
            <Category>Apeerance</Category>
            <Editor>
                <Type>Transparency.Design.AlphaImageEditor, Transparency.Design</Type>
                <BaseType>System.Drawing.Design.UITypeEditor</BaseType>
            </Editor>
            <EditorBrowsable>Always</EditorBrowsable>
        </Property>
    </Class>
</Classes>


Далее разместил контрол на форме. В проперти грид свойство Image не появилось
Дальнейшие пляски с бубном подтвердили, что:
1. Свойство не отображается так как для него не найдено подходящего редактора
2. Мой редактор Visual Studio не подцепила

Попытался создать контрол и редактор для его свойства для полного фреймворка — работает без всяких проблем. Очевидно проблема во взаимодействии Compact-сборок и сборок полного фреймворка. Т.е. при разработке контрола для Compact Framework приходится описывать сам контрол в Smart Device сборке, а редактор в Windows Class Library, которая ссылается на сборку для Smart Device.
Вероятно из-за этого дищайнер Visual Studio не может найти редактор.

К сожалению я исчерпал идеи как это можно исправить. Возможно у кого-то они есть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.