0

Le DescriptionViewer partie du DataField est utilisé pour afficher la description propriété du System.ComponentModel. DisplayAttribute comme info-bulle dans le formulaire généré. Je ne veux pas utiliser cette fonctionnalité et même si je peux vous assurer que l'élément d'interface utilisateur n'est pas visible à l'aide d'un style à définir soit le DescriptionViewerVisibility à Collapsed ou en réglant le DescriptionViewerStyle être nulle comme indiqué ci-dessous, il reste de l'espace réservé dans la disposition DataField pour cet élément.Reconquérir l'espace de la partie DescriptionViewer des DataFields sur une boîte à outils Silverlight DataForm

<Style x:Key="DataFieldStyle1" TargetType="dataFormToolkit:DataField"> 
    <Setter Property="DescriptionViewerVisibility" Value="Collapsed"/> 
    <Setter Property="DescriptionViewerStyle" Value="{x:Null}" /> 
</Style> 

Cet espace est comme le gaspillage dans mon scénario et je veux m'en débarrasser. Je m'attendrais à ce que cette disposition soit exposée par la propriété DataField.Template mais lorsque j'utilise Blend pour modifier une copie du modèle par défaut, la disposition n'est pas présente. J'utilise le fichier System.Windows.Controls.Data. DataForm.Toolkit, Version = 2.0.5.0 du Octobre 2009 version de Silverlight Toolkit dans un projet Silverlight 3 de la version bêta des services RIA de WCF. J'utilise Visual Studio 2008 SP1. Je sais qu'il existe une version de novembre 2009 mais je ne vois aucune mention de cette modification dans les notes de publication.

Répondre

1

Une solution alternative consiste à utiliser l'étiquette DataForm et un contrôle pour afficher votre champ.

Au lieu d'utiliser un DataField comme celui-ci et éventuellement avoir un espace pour DescriptionViewer

<dataControls:DataField> 
    <TextBox Text="{Binding FirstName, Mode=TwoWay}" /> 
</dataControls:DataField> 

Vous pouvez utiliser ce code, et vous n'aurez pas le DescriptionViewer

<dataInput:Label Target="{Binding ElementName=tbFirstName}" /> 
<TextBox x:Name="tbFirstName" Text="{Binding FirstName, Mode=TwoWay}" /> 

Avec cette solution, vous allez perdre la mise en page générée qui vient avec le DataForm mais vous pouvez le faire facilement avec une simple grille

+0

Cela semble être une bonne idée. Le DataField fournit-il une valeur autre que l'ajout de Label et de DescriptionViewer que je perdrais et que je devrais implémenter moi-même? Je m'attendrais à ce qu'il y ait un certain comportement de validation qui est implémenté par le contrôle DataField. –

+0

Cette solution nécessite également d'implémenter le visuel et le comportement pour les autres attributs DataAnnotation tels que ReadOnly et Required. –

+0

La DataAnnotation requise fonctionne. Pour le ReadOnly je ne l'ai pas encore testé. Autre DataAnnotation fonctionne trop comme affichage par exemple. – Zied

0

Utiliser réflecteur Je peux voir que la méthode DataField.OnApplyTemplate appelle une méthode privée appelée GenerateUI, qui utilise le code classique pour créer une grille avec une colonne pour la DescriptionViewer, et je ne vois pas un moyen de éviter cela, sans faire un niveau très bas .NET clr de piratage qui serait inapproprié. Est-ce que j'ai râté quelque chose? Je commence à arriver à la conclusion que vous devez soit rester proche du comportement par défaut de ces contrôles Silverlight Toolkit si vous voulez bénéficier des gains de productivité supposés. Rien de plus que cette personnalisation plutôt triviale semble être une histoire incomplète pour le moment.