Question

Le code Microsoft exemple contient les éléments suivants:

<Grid>
...     
  <Border Name="Content" ... >
...     
  </Border>
</Grid>
<ControlTemplate.Triggers>
  <Trigger Property="IsExpanded" Value="True">
     <Setter TargetName="ContentRow" Property="Height"
             Value="{Binding ElementName=Content,Path=DesiredHeight}" />
  </Trigger>
...
</ControlTemplate.Triggers>

Lors de l'exécution, cependant, ce code génère l'erreur de liaison de données suivante:

System.Windows.Data Error: 39 : BindingExpression path error: 'DesiredHeight' property not found on 'object' ''Border' (Name='Content')'. BindingExpression:Path=DesiredHeight; DataItem='Border' (Name='Content'); target element is 'RowDefinition' (HashCode=2034711); target property is 'Height' (type 'GridLength')

En dépit de cette erreur, le code fonctionne correctement. Je l'ai regardé à travers la documentation et DesiredHeight ne semble pas être membre de Border. Quelqu'un peut-il expliquer où DesiredHeight vient? Aussi, est-il un moyen de résoudre / supprimer cette erreur si ma sortie de programme est propre?

Était-ce utile?

La solution

Vous pouvez voir cette propriété dans la partie de code de votre application

Edit:

Border content = new Border();
int desiredHeight = content.DesiredSize.Height;
int desiredWidth = content.DesiredSize.Width;

Pour résoudre le problème, il essayez de se lier à l'attribut de hauteur, puisque DesiredHeight ne semble pas être disponible dans le balisage XAML du contrôle des frontières.

Autres conseils

Je suis tombé sur ce sujet. Le long des lignes de ce que user275587 dit, leur exemple fonctionne parce que le déclencheur supprime le Heigth = « 0 » sur le RowDefination.

Alors je passe le réglage de la hauteur / logique de déclenchement, de sorte que le RowDefination n'a pas la hauteur set

<Grid.RowDefinitions>
     <RowDefinition Height="Auto"/>
     <RowDefinition Name="ContentRow" />
</Grid.RowDefinitions>
...
<ControlTemplate.Triggers>
     <Trigger Property="IsExpanded" Value="False">
             <Setter TargetName="ContentRow" Property="Height" Value="0" />
     </Trigger>
</ControlTemplate.Triggers>

Essayez.

<Setter
    TargetName="content"
    Property="Height"
    Value="{Binding ElementName=content, Path=DesiredHeight}"
/>
    ↓
<Setter TargetName="content" Property="Height" Value="NaN"/>

La liaison est inutile.

Je suis venu sur la même question dans ma demande. En fin de compte j'ai changé le code pour que je basculée la visibilité du contenu entre Collapsed et Visible, et a remplacé le Grid avec un StackPanel.

Je l'ai trouvé en général la qualité des échantillons de modèle de contrôle MS pour être assez bonne, mais l'erreur avec celui-ci était un peu frustrant.

Même problème, mais la solution acceptée par Carlo ne fonctionne pas parfaitement. Le problème que l'affiche était confronté disparaît mais l'Expander brise partiellement -

si vous avez un contenu qui a besoin de se développer dans un dispositif d'expansion déjà étendu, il ne le fera pas avec la liaison à DesiredSize.Height , vous devez DesiredHeight - pourrait être en raison d'une raison donnée par user275587.

eu le même problème. Utilisait un Expander personnalisé dans un ComboBox personnalisé. Aucune de ces travaillé pour moi, la liaison à Height a cassé la fonctionnalité du Expander, en utilisant un StackPanel a également battu l'affichage des éléments dans chaque groupe. J'ai trouvé:

<Setter TargetName="ContentRow" Property="Height" Value="Auto"/>

DesiredHeight vient de l'élément contenu et il est une liaison valide. Je pense que la raison pour laquelle votre liaison ne ne résoudra pas parce que DesiredHeight repose sur la propriété de la hauteur et vous avez pas encore une hauteur fixe dans votre modèle afin qu'il évalue à Double.NaN

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top