WPF 국경이 원하는 손상
-
22-08-2019 - |
문제
다음과 같은 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으로 평가되기 때문입니다.