我有一个网格,我希望弹出窗口与它保持恒定关系,无论弹出窗口和网格的大小如何。我在这里使用转换器是代码
< Grid Name=YParamTextBlock>
<TextBlock HorizontalAlignment="Center"/>
<Popup PlacementTarget="{Binding ElementName=YParamTextBlock}} Placement="Center">
<Popup.VerticalOffSet>
<MultiBinding Mode="OneWay" Converter="{StaticResource OffsetConverter} NotifyOnTargetChanged="True">
<Binding Mode="OneWay" ElementName="YParamTextBlock" Path="ActualHeight" NotifyOnTargetUpdated="True"/>
<Binding Mode="OneWay" RelativeSource={RelativeSource Self} Path="ActualHeight" NotifyOnTargetChanged="True"/>
</MultiBinding>
</Popup.VerticalOffset>
</Popup>
<Grid>
问题是两个控件首次创建时的实际高度为0.0,所以我添加了NotifyOnTargetChanged以便修复它。 现在,由于某种原因,NotifyOnTargetChanged修复了Grid的ActualHeight的重新绑定,但Popup仍为0.0。反正有没有通知弹出窗口实际高度有变化?或者针对这个问题的任何其他解决方案?
答案 0 :(得分:0)
实际高度和宽度是read-only
您无法直接绑定,您可以使用Kent Boogaart在此Answer
答案 1 :(得分:0)
为什么多重绑定? VerticalOffset
是双倍的,因此您只需要一个绑定值。
我不知道你的转换器做了什么,但是假设你希望它获取你的YParamTextBlock网格的ActualHeight属性然后返回一个对应你想要给你的弹出窗口的VerticalOffset的双,那么下面的内容可能更容易遵循:
<Grid x:Name="YParamTextBlock">
<TextBlock HorizontalAlignment="Center"/>
<Popup PlacementTarget="{Binding ElementName=YParamTextBlock}}
Placement="Center"
VerticalOffset="{Binding ActualHeight, ElementName=YParamTextBlock,
Converter={StaticResource OffsetConverter}}"/>
<Grid>