29 votes

Quelles fonctionnalités .Net / WPF vous manquent lorsque vous travaillez dans Silverlight?

J'ai récemment commencé à travailler avec Silverlight et tout de suite remarqué la différence entre la BCL Silverlight et le plein .Net et WPF. Pour certains d'entre eux j'ai trouvé beaucoup de solutions mises en ligne par d'autres développeurs, et d'autres ont été plus compliqué. Quelles fonctions/classes avez-vous été surpris/déçu de voir absents des bibliothèques de classes Silverlight, et qu'avez-vous fait pour travailler autour d'eux?

Certains de mes ont été:

  1. Aucun événement déclenché animations - j'ai créé une classe d'assistance avec des méthodes statiques pour la fixation de chaque type d'animation que j'ai utilisé pour les storyboards dans une bibliothèque partagée, et au niveau de l'application, je créer des classes avec des méthodes statiques pour les mettre tous ensemble que je l'aurais dans le code XAML si l'on travaille en WPF. Jusqu'à présent, cela a été une bonne solution pour garder mes animations organisées et la logique de mes gestionnaires d'événements.
  2. ScrollViewer ne prend pas en charge la molette de la souris - Adam Cooper a créé une excellente bibliothèque de classe qui ajoute cette fonctionnalité qui nécessite le minimum de code à mettre en œuvre dans tout projet Silverlight. Son site semble être en panne en ce moment, alors voici un lien pour Tim Heuer blog qui explique et liens (de sorte qu'il sera disponible lors de son site est de retour en ligne). Ajouter de la molette de la souris de soutien à ScrollViewer dans Silverlight
  3. SortedDictionary<T, K> est manquant. J'ai trouvé ce post qui contient une mise en œuvre, mais je n'ai pas fini de l'utiliser moi-même.
  4. ResourceDictionary.MergedDictionaries n'est pas disponible - Nouveau...trouvé quelqu'un qui a mis cette et affiché le code source, mais il semblait être un peu compliqué. Je vais probablement travailler à travers elle un peu, mais n'ont pas encore le faire. MergedDictionaries en Silverlight
  5. ZIndex attaché à la propriété est uniquement disponible sur la Toile de l'objet. J'ai posté cela comme une question ici DONC, et quelqu'un a fait une très bonne suggestion pour l'envelopper de mes conteneurs dans une collection si c'est ce qu'il faut. Il se sent un peu bâclée, mais tu dois faire ce que tu dois faire. Mes conteneurs sont imbriqués trois niveaux de profondeur, donc j'ai peut-être besoin de se déformer tous dans la Toile des objets et de l'ensemble de la Toile.ZIndex trois fois pour chaque événement. Laids comme le péché, mais si c'est le seul moyen, alors ainsi soit-il.

Je suis intéressé de voir comment d'autres questions communes les plus expérimentés aux développeurs Silverlight avons rencontré et ce que vous avez fait pour les corriger.

35voto

Paul Stovell Points 14880

Où dois-je commencer? :)

  • Pas De MultiBinding
  • Pas de ElementName= liaison
  • Objet templatebinding ne peut que se référer à diriger des propriétés, qui n'est pas attachée DP
  • Pas de RelativeSource de liaison
  • Pas de liaison à l'enfant propriétés - e.g, {Binding Path=Foo.Bar[0].Baz}
  • Pas de possibilité de s'abonner à des événements de modification sur n'importe quelle propriété de dépendance - la classe auteur a explicitement définir un événement (et dans la plupart des cas, seulement un ou deux propriétés dans SL contrôles réellement faire)
  • Le Visual State Manager exige le contrôle de l'auteur, à savoir tous les style-mesure les états lorsque le contrôle est écrit, ce qui rompt le "extension à travers les styles et les modèles, pas d'héritage" histoire qui favorise WPF
  • Pas D'Ornements
  • Pas De Navigation
  • Pas de dépendance de l'héritage
  • N/sucky appui externe ResourceDictionaries/fusionné les dictionnaires
  • Validation de l'histoire suce (c'est à peine mieux en WPF)
  • L'impression
  • <Setter .. Value="{Binding ...}" /> n'est pas pris en charge

Sur le dessus de cela un certain nombre de signatures de méthode changé pour aucune bonne raison. E. g., IIRC, les surcharges pour les Dispatcher.Invoquer sont différents, au lieu de SL simplement ignorer les paramètres, il ne peut pas encore traiter. Ou un autre exemple, ObservableCollection en WPF peut soulever Ajouter, Supprimer, Remplacer et Déplacer des événements - dans SL, c'est que les trois premiers.

Depuis, j'écris du code de travail sur les deux plates-formes, le code finit par être jonché de stratégie de modèles et de #ifdefs. Se sent comme C++, tout recommencer :-)

3voto

Emperor XLII Points 5493

En plus de Paul Stovell's excellente liste:

  • Aucun extensions de balisage.
  • Pas de x:Type extension de balisage.
  • Pas de LayoutTransform (bien qu'il existe des solutions de contournement).
  • Aucune commodité des métadonnées pour DependencyProperties (à définir manuellement mesure/organiser/render invalidation, des modifications de la propriété, etc).
  • Pas de lumière poids- Drawing ou DrawingContext classes (utiliser Shape des éléments).
  • Pas de commandes.

2voto

sipwiz Points 15291

Pas de prise ou UDP est probablement la plus grande douleur pour moi, suivie par le manque de crypto classes.

En outre, le manque classés comme StringDictionary et ApplicationException que vous vous habituez à, puis trouver ne sont pas autour sont une douleur. Généralement, il est possible de trouver un substitut ou une solution de contournement, mais personnellement je préfère les télécharger Silverlight aller de 5MO à 6MO nous n'avons donc pas ;-).

Un truc vraiment pratique, j'ai vu sur un blog qui m'a permis de réutiliser mon normal .Net assemblées pour ajouter des éléments comme un lien. Dans un certain nombre de cas, maintenant, j'ai deux fichiers de projet en utilisant les mêmes fichiers de classe avec une cible à atteindre .Net 3.5 et l'autre de Silverlight runtime. Je suis extrêmement reconnaissante, j'ai trouvé cette astuce que j'étais déjà en train de descendre le chemin de la création de différentes bases de code pour .Net 3.5 et Silverlight!

2voto

felixthehat Points 557

En tant que concepteur, le manque de déclencheurs d'événement / de propriété est si impuissant.

Je ne suis pas un gars C # / oop, donc quand je dois déclencher une chaîne de storyboards lorsqu'un élément se charge ou qu'un bouton est cliqué ou après la fin d'un autre storyboard, je dois appeler les développeurs dans :(

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X