Każdy kto kiedykolwiek stworzył choćby jedną kontrolkę w Compact Framework zauważył, że ilość atrybutów właściwości / klas jest bardzo ograniczona. Praktycznie .NET CF implementuje tylko następujące atrybuty:
- DefaultValueAttribute (tylko w wersji jedno parametrowej gdzie można podać wartość)
- DesignTimeVisibleAttribute
- EditorBrowsableAttribute
Brak ten wynika z faktu, iż .NET Compact Framework nie wspiera automatycznie Visual Studio designerów.
Aby zapewnić sobie pełen wachlarz atrybutów trzeba do projektu dodać plik design-time atrybutów:

Dodany plik ma następującą zawartość:
<?xml version="1.0" encoding="utf-16"?> <Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd"> </Classes>
Aby dodać kontrolkę wystarczy dodać następujący element:
<Class Name="Cubicsoft.WindowsMobile.Controls.Label"> </Class>
Kolejne klasy muszą być potomkiem “Classes”. Choć wg. mnie dobrym zwyczajem jak w przypadku “zwykłych” klas jest przyjęcie zasady: jeden plik na jedną kontrolkę.
Warto rozpocząć definiowanie parametrów od atrybutu DesktopCompatible, aby ustrzec się błędęm “Visual Inheritance is Currently Disabled” który może się pojawić w momencie dodania kontrolki do Form-a:
// włączenie DesktopCompatible <DesktopCompatible>true</DesktopCompatible>
Kolejne elementy jak DefaultProperty, DefaultEvent itp. dotyczą oczywiście klasy.
Właściwości definiujemy w następujący sposób:
<Property Name="BorderStyle"> <Category>Appearance</Category> <Description>Indicates whether the label should have a border.</Description> </Property>
Edytor w pełni wspiera IntelliSense, więc pisanie kolejnych elementów jest dziecinnie proste.
Wynikowy plik dla kontrolki Label może wyglądać tak:
<?xml version="1.0" encoding="utf-16"?> <Classes xmlns="http://schemas.microsoft.com/VisualStudio/2004/03/SmartDevices/XMTA.xsd"> <Class Name="Cubicsoft.WindowsMobile.Controls.Label"> <DesktopCompatible>true</DesktopCompatible> <DefaultProperty>Text</DefaultProperty> <Property Name="BorderStyle"> <Category>Appearance</Category> <Description>Indicates whether the label should have a border.</Description> </Property> <Property Name="BorderColor"> <Category>Appearance</Category> <Description>The border color of this component.</Description> </Property> </Class> </Classes>
Po zapisaniu i skompilowaniu biblioteki otrzymamy dodatkowy plik o rozszerzeniu [Nazwa biblioteki].PocketPC.asmmeta.dll jest to biblioteka, która zawiera nasze nowe definicję atrybutów dla designerów.







2 ResponsesLeave one →
Leave a Reply