以下Microsoft example code包含以下内容:
<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
来自哪里?另外,有没有办法解决/抑制这个错误,所以我的程序输出是干净的?
答案 0 :(得分:8)
您可以在应用程序的代码部分中看到该属性
编辑:
Border content = new Border();
int desiredHeight = content.DesiredSize.Height;
int desiredWidth = content.DesiredSize.Width;
要解决此问题,请尝试将其绑定到Height属性,因为DesiredHeight似乎在Border控件的XAML标记中不可用。
答案 1 :(得分:4)
我遇到过这个。根据user275587的说法,他们的示例有效,因为触发器删除了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>
答案 2 :(得分:3)
试试吧。
<Setter
TargetName="content"
Property="Height"
Value="{Binding ElementName=content, Path=DesiredHeight}"
/>
↓
<Setter TargetName="content" Property="Height" Value="NaN"/>
绑定是不必要的。
答案 3 :(得分:2)
我在申请中遇到了同样的问题。最后,我更改了代码,以便在Collapsed
和Visible
之间切换内容的可见性,并将Grid
替换为StackPanel
。
我一般发现MS控制模板样本的质量非常好,但这个错误有点令人沮丧。
答案 4 :(得分:2)
同样的问题,但Carlo接受的解决方案并不完美。 海报面临的问题消失了,但扩张器部分破裂 -
如果你有一些内容需要在已经扩展的扩展器中扩展,它将不会通过绑定到 DesiredSize.Height 来实现,你需要 DesiredHeight - 可能由于user275587给出的原因。
答案 5 :(得分:2)
有同样的问题。在自定义Expander
中使用自定义ComboBox
。
以上都不适用于我,绑定到Height
打破了Expander
的功能,使用StackPanel
也打破了每个组中项目的显示。我找到了:
<Setter TargetName="ContentRow" Property="Height" Value="Auto"/>
答案 6 :(得分:1)
DesiredHeight来自内容元素,它是一个有效的绑定。我认为你的绑定无法解决的原因是因为DesiredHeight依赖于Height属性而你没有在模板中设置一个固定的Height,因此它的计算结果为Double.Nan