Jakub Florczyk - Blog o programowaniu .NET i Android

Programista praktyczny

Atrybuty designerów w kontrolkach .NET Compact Framework

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:

design-time_attribute_file

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.

« Previous post