Frage

Der folgende Microsoft Beispielcode folgendes enthält:

<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>

Wenn er ausgeführt wird, aber dieser Code generiert die folgende Datenbindung Fehler:

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')

Trotz dieses Fehlers funktioniert der Code korrekt. Ich habe durch die Dokumentation geschaut und DesiredHeight erscheint nicht Mitglied in Border zu sein. Kann mir jemand erklären, wo DesiredHeight herkommt? Auch ist es eine Möglichkeit, zu lösen / unterdrücken diese Fehler so mein Programm Ausgabe ist sauber?

War es hilfreich?

Lösung

Sie können diese Eigenschaft im Codeteil Ihrer Anwendung finden Sie unter

Edit:

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

Um das Problem zu lösen versuchen, es auf die Höhe Attribut zu binden, da DesiredHeight nicht in dem XAML-Markup der Grenzkontrolle verfügbar zu sein scheint.

Andere Tipps

Ich habe in dieser läuft. Nach dem Vorbild von dem, was user275587 sagte, ihr Beispiel funktioniert, weil der Auslöser die Heigth = „0“ auf der RowDefination entfernt.

Also habe ich die Höheneinstellung / Trigger-Logik-Schalter, so dass die RowDefination hat keine Höhe festgelegt

<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>

Versuchen Sie es.

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

Die Bindung ist nicht erforderlich.

kam ich auf das gleiche Problem in meiner Anwendung auf. Am Ende änderte ich den Code, so dass ich die Sichtbarkeit des Inhalts zwischen Collapsed und Visible umgeschaltet, und ersetzt den Grid mit einem StackPanel.

Ich habe festgestellt, im Allgemeinen der Qualität der MS Kontrolltemplate Proben ziemlich gut zu sein, aber der Fehler mit diesem war ein wenig frustrierend.

Die gleiche Problem, aber die akzeptierte Lösung von Carlo perfekt funktioniert nicht. Das Problem, das das Plakat war mit Blick geht weg, aber der Expander teilweise bricht -

Wenn Sie einige Inhalte haben, die in einem bereits erweitert Expander erweitern muss, wird es nicht so tun, mit der Bindung an DesiredSize.Height , müssen Sie DesiredHeight - könnte sein wegen einem Grund von user275587 gegeben.

das gleiche Problem hat. War eine benutzerdefinierte Expander in einem benutzerdefinierten ComboBox verwenden. Keines der oben genannten arbeitete für mich, die Bindung an Height brach die Funktionalität des Expander unter Verwendung eines StackPanel auch die Anzeige der Elemente in jeder Gruppe brach. Ich fand:

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

DesiredHeight kommt von Content-Elemente und es ist eine gültige Bindung. Ich denke, der Grund, Ihre Bindung löst nicht ist, weil DesiredHeight auf Height-Eigenschaft beruht, und Sie haben keine feste Größe in der Vorlage festgelegt, so dass es zu Double.NaN auswertet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top