Domanda

Il seguente codice di esempio Microsoft contiene quanto segue:

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

Quando viene eseguito, tuttavia, questo codice genera il seguente errore di associazione dati:

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

Nonostante questo errore, il codice funziona correttamente. Ho guardato attraverso la documentazione e DesiredHeight non sembra essere un membro di Border. Qualcuno può spiegare dove DesiredHeight è venuta da? Inoltre, c'è un modo per risolvere / sopprimere questo errore quindi il mio output del programma è pulito?

È stato utile?

Soluzione

Si può vedere che la proprietà nella parte di codice dell'applicazione

Modifica:

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

Per risolvere il problema provare legandolo all'attributo altezza, dal momento che DesiredHeight non sembra essere disponibile nel markup XAML del controllo di frontiera.

Altri suggerimenti

Ho incontrato questo. Lungo le linee di quello che user275587 detto, il loro esempio funziona perché il grilletto rimuove l'Altezza = "0" sul RowDefination.

Così posso passare la logica di impostazione altezza / grilletto, in modo che il RowDefination non ha Altezza 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>

Da provare.

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

legame è inutile.

Sono venuto sullo stesso problema nella mia applicazione. Alla fine ho cambiato il codice in modo che basculare la visibilità del contenuto tra Collapsed e Visible, e sostituito il Grid con un StackPanel.

Sono generalmente trovato la qualità dei campioni di modelli di controllo MS per essere abbastanza buono, ma l'errore con questo era un po 'frustrante.

Lo stesso problema, ma la soluzione accettata da Carlo non funziona perfettamente. Il problema che il manifesto è stato rivolto va via ma l'Expander parzialmente rompe -

se si dispone di alcuni contenuti che ha bisogno di espandersi in un espansore già espanso, esso non farlo con l'Associazione a DesiredSize.Height , è necessario DesiredHeight - potrebbe essere dovuto ad una ragione data dal user275587.

Ha avuto lo stesso problema. Usando un Expander personalizzato in una ComboBox personalizzato. Nessuno dei precedenti ha lavorato per me, il legame con Height ha rotto la funzionalità del Expander, utilizzando un StackPanel anche rotto la visualizzazione degli oggetti in ogni gruppo. Ho trovato:

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

DesiredHeight viene da elemento di contenuto ed è un legame valido. Penso che il motivo per il vostro legame non risolve perché DesiredHeight si basa sulla proprietà di altezza e non è stato fissato un altezza fissa nel modello in modo che restituisce Double.NaN

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top