Pergunta

A seguir Microsoft código de exemplo contém a seguinte:

<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 prazo, no entanto, este código gera o seguinte erro de ligação de dados:

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

Apesar deste erro, o código funciona corretamente. Eu olhei através da documentação e DesiredHeight não parece ser um membro de Border. Alguém pode explicar onde DesiredHeight está vindo? Além disso, existe alguma maneira de resolver / suprimir este erro por isso a minha saída do programa é limpa?

Foi útil?

Solução

Você pode ver que a propriedade na parte do código de sua aplicação

Editar:

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

Para resolver o problema de ligação para o atributo Altura tentativa, desde DesiredHeight não parece estar disponível na marcação XAML do controlo fronteiriço.

Outras dicas

Eu corri para isso. Ao longo das linhas do que user275587 disse, seu exemplo funciona porque o gatilho remove o ALTURA = "0" no RowDefination.

Então eu mudar a lógica configuração de altura / gatilho, para que o RowDefination tem nenhum conjunto Altura

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

Tente.

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

A ligação é desnecessária.

Eu vim sobre o mesmo problema no meu aplicativo. No final, eu mudei o código para que eu alternado a visibilidade do conteúdo entre Collapsed e Visible, e substituiu o Grid com um StackPanel.

Eu geralmente encontrada a qualidade das amostras modelo de controle MS para ser muito bom, mas o erro com este foi um pouco frustrante.

Mesmo problema, mas a solução aceita por Carlo não funciona perfeitamente. O problema que o cartaz estava enfrentando vai embora, mas o Expander parcialmente breaks -

Se você tem algum conteúdo que precisa para expandir em um expansor já expandiu, ele não vai fazê-lo com a ligação ao DesiredSize.Height , você precisa DesiredHeight - poder ser devido a uma razão dada por user275587.

tive o mesmo problema. Estava usando um Expander personalizado em um ComboBox personalizado. Nenhuma das opções acima funcionou para mim, a ligação a Height quebrou a funcionalidade do Expander, usando um StackPanel também quebrou a exibição dos itens em cada grupo. Eu encontrei:

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

DesiredHeight vem do elemento de conteúdo e é uma ligação válida. Penso que a razão a sua ligação não resolve é porque DesiredHeight depende de propriedade de altura e você não tiver definido uma altura fixa em seu modelo para que ele avalia a Double.NaN

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top