12

以下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来自哪里?另外,有没有办法解决/抑制这个错误,所以我的程序输出是干净的?

4

7 回答 7

9

您可以在应用程序的代码部分中看到该属性

编辑:

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

要解决此问题,请尝试将其绑定到 Height 属性,因为 DesiredHeight 在边框控件的 XAML 标记中似乎不可用。

于 2009-05-19T16:41:24.010 回答
6

有同样的问题。在自定义Expander中使用自定义ComboBox。以上都对我不起作用,绑定Height破坏了 的功能Expander,使用 aStackPanel也破坏了每个组中项目的显示。我发现:

<Setter TargetName="ContentRow" Property="Height" Value="Auto"/>
于 2013-05-05T12:20:35.927 回答
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>
于 2010-09-28T23:38:05.273 回答
3

尝试一下。

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

绑定是不必要的。

于 2012-04-25T11:10:34.923 回答
2

我在我的申请中遇到了同样的问题。最后,我更改了代码,以便在 和 之间切换内容的可见性CollapsedVisible并将 替换GridStackPanel

我通常发现 MS 控制模板样本的质量非常好,但是这个错误有点令人沮丧。

于 2009-07-14T17:58:36.720 回答
2

同样的问题,但 Carlo 接受的解决方案并不完美。海报所面临的问题消失了,但扩展器部分损坏-

如果您有一些内容需要在已经扩展的扩展器中扩展,它不会使用 Binding to DesiredSize.Height这样做,您需要DesiredHeight - 可能是由于 user275587 给出的原因。

于 2011-11-18T12:25:47.763 回答
1

DesiredHeight 来自内容元素,它是一个有效的绑定。我认为您的绑定无法解决的原因是因为 DesiredHeight 依赖于 Height 属性并且您没有在模板中设置固定的高度,因此它的计算结果为 Double.Nan

于 2010-05-28T04:23:59.870 回答