{Binding ElementName = ...}在任何CompositeTransform属性中都不起作用

时间:2015-04-01 20:50:15

标签: xaml data-binding windows-phone-8.1 winrt-xaml elementname

我有以下代码,我在主网格(LayoutRoot)下面隐藏了一个WebView,所以我可以稍后进行滑动动画:

<Page...>
    <Grid x:Name="LayoutRoot">
        ...
        <Grid x:Name="ContentRoot">
            ...
        </Grid>
        <WebView...>
            <WebView.RenderTransform>
                <CompositeTransform TranslateY="{Binding ElementName=LayoutRoot, 
                                    Path=ActualHeight}"/> <!--Does not work-->
            </WebView.RenderTransform>
        </WebView> 
    </Grid>
</Page>

当我第一次在设计器中输入{Binding ElementName=...}行时,WebView就会出现在网格下方。但是,当我重建解决方案或运行应用程序时,WebView只是模糊了整个LayoutRoot。

无论我绑定什么/无论控制是什么,都会发生这种情况;但是,绑定到 exact 相同的表达式将在设计器和手机中正确显示。为了证明我在说什么:

<Button Width="{Binding ElementName=LayoutRoot, Path=ActualHeight}"> <!--Works perfectly, both on designer and phone-->
    <Button.RenderTransform>
        <CompositeTransform SomeProperty={Binding ElementName=SomeElement, Path=SomePath}"/> <!--This does not work-->
    </Button.RenderTransform>
</Button>

有没有办法绑定LayoutRoot.ActualHeight而不是为此编写C#代码?

1 个答案:

答案 0 :(得分:1)

您遇到的一个问题是您尝试绑定到ActualHeight,它不是依赖属性,也不是可观察的(INotifyPropertyChanged)属性,因此绑定仅在首次创建时进行一次计算。 / p>