문제

다음과 같은 Microsoft 예제 코드 다음을 포함합니다.

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

그러나 실행되면이 코드는 다음 데이터베인딩 오류를 생성합니다.

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

이 오류에도 불구하고 코드는 올바르게 작동합니다. 나는 문서를 살펴 보았습니다 DesiredHeight 회원이 아닌 것 같습니다 Border. 누구든지 어디에 있는지 설명 할 수 있습니다 DesiredHeight 오고 있습니까? 또한이 오류를 해결/억제하여 프로그램 출력을 깨끗하게하는 방법이 있습니까?

도움이 되었습니까?

해결책

응용 프로그램의 코드 부분에서 해당 속성을 볼 수 있습니다.

편집하다:

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

문제를 해결하려면 테두리 제어의 XAML 마크 업에서 원하는 하이 (DanteiredHeight)가 사용할 수없는 것으로 보이므로 높이 속성에 바인딩하십시오.

다른 팁

나는 이것에 달렸다. 사용자 275587이 말한 선을 따라, 트리거가 RowDefination에서 트리거가 heigth = "0"을 제거하기 때문에 예제가 작동합니다.

그래서 높이 설정/트리거 로직을 전환하므로 RowDefination에는 높이 세트가 없습니다.

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

시도 해봐.

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

바인딩은 불필요합니다.

응용 프로그램에서 같은 문제를 겪었습니다. 결국 나는 코드를 변경하여 Collapsed 그리고 Visible, 그리고 교체 Grid a StackPanel.

나는 일반적으로 MS 제어 템플릿 샘플의 품질이 꽤 좋다는 것을 알았지만이 오류는 약간 실망 스러웠습니다.

같은 문제이지만 Carlo의 허용 솔루션은 완벽하게 작동하지 않습니다. 포스터가 직면 한 문제는 사라지지만 Expander는 부분적으로 부서집니다.

이미 확장 된 확장기에서 확장 해야하는 콘텐츠가있는 경우 바인딩으로는 그렇게하지 않습니다. 원하는Size.height, 당신은 필요합니다 원하는 길 - user275587의 이유 때문일 수 있습니다.

같은 문제가있었습니다. 관습을 사용하고있었습니다 Expander 관습으로 ComboBox. 위의 어느 것도 나를 위해 일하지 않고 Height 의 기능을 깨뜨렸다 Expander, a StackPanel 또한 각 그룹의 항목 표시를 깨뜨 렸습니다. 나는 찾았다 :

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

원하는 구분은 컨텐츠 요소에서 나오고 유효한 바인딩입니다. 바인딩이 해결되지 않는 이유는 원하는 구분이 높이 속성에 의존하고 템플릿에서 고정 높이를 설정하지 않았기 때문에 Double.nan으로 평가되기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top