Add Me!Close Menu Navigation

User eXperience Foundation

Add Me!Open Categories Menu

Design Time Resources dans Blend 4

Blend 4 nous offre de nouvelles fonctionnalités et l’une d’entre elles est assez obscure de prime abord. Dorénavant, il est possible dans Expression Blend de créer des ressources uniquement utilisées au design time (au moment de la conception sous Blend ou Visual Studio). Le problème est assez banal, Il est souvent nécessaire d’affecter des ressources graphiques qui ne sont définies qu’à l’exécution. Du coup, dans l’espace de travail graphique, sous Visual Studio ou Blend, celles-ci ne sont pas résolues puisque pas encore définies. Cela occasionne des erreurs d’accès et quelques problèmes d’affichage. Blend 4 permet maintenant de résoudre cette problématique mais la manière de procéder n’est pas très évidente. L’objectif est de créer un dictionnaire de ressource contenant une ressource ou plusieurs ressources que vous utiliserez uniquement au design time. Le première chose à faire consiste à créer un projet ainsi qu’une ressource contenue dans un dictionnaire de ressource. Un dégradé ou un solidColorBrush fera bien l’affaire (voir ci-dessous).

Ensuite supprimez le lien contenu par App.xaml, les ressources contenues sont désormais inaccessibles et vous obtenez des erreurs d’accès. Ce n’est pas grave, il vous faut passer par cette étape. Sauvegardez le projet puis ouvrez-le à nouveau sous Blend 4, vous obtenez une jolie boîte de dialogue vous indiquant si vous souhaitez créer un dictionnaire utilisable au design time (voir ci-dessous).

Pour finir, créez la ressource via C#, c’est cette dernière qui sera utilisée par Silverlight à l’exécution.

Au final vous obtenez deux rendus différents. Le premier concerne le design time, le second correspond au rendu final à l’exécution utilisant la ressource instanciée lors de l’initialisation :) Du coup, le designer est complètement autonomes. Au final, ce procédé n’est pas très orthodoxe mais il est très utile. Le principe ne repose sur rien d’autre qu’une compilation conditionnelle générée au niveau du projet(.csproj). Le code suivant :

<Page Include="PropertiesDesignTimeResources.xaml">
 <Generator>MSBuild:Compile</Generator>
 <SubType>Designer</SubType>
 </Page>

est remplacé par celui-ci :

<Page Include="PropertiesDesignTimeResources.xaml"
Condition="'$(DesignTime)'=='true'
OR ('$(SolutionPath)'!='' AND Exists('$(SolutionPath)')
AND '$(BuildingInsideVisualStudio)'!='true'
AND '$(BuildingInsideExpressionBlend)'!='true')">
 <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
 <ContainsDesignTimeResources>true</ContainsDesignTimeResources>
 </Page>
Posted By admin

One Response to “Design Time Resources dans Blend 4”

  1. Jared says:

    Thank you!!!!!!!!!!!!!!!!!!!

    I was worried this wouldn’t work because my .xaml is included as content, but it worked the same.

Leave a Reply