绑定到ActualHeight不起作用

时间:2010-09-24 13:04:34

标签: wpf binding actualwidth actualheight

我尝试创建一个自定义控件,具有半透明的圆形背景:

<Canvas>
    <TextBlock x:Name="StopText" Text="Some test text"/>
    <Rectangle Fill="SkyBlue"
               Width="{Binding Source=StopText, Path=ActualHeight}" 
               Height="20"  
               RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>

问题是我不能绑定到ActualHeight / ActualWidth属性,因为它们不是依赖属性。

如何处理相同大小的矩形和文本框?

1 个答案:

答案 0 :(得分:10)

正确的绑定是在绑定到另一个元素时使用ElementName,而不是Source

<Canvas>
    <TextBlock x:Name="StopText" Text="Some test text"/>
    <Rectangle Fill="SkyBlue"
               Width="{Binding ElementName=StopText, Path=ActualHeight}" 
               Height="20"  
               RadiusX="5" RadiusY="5" Opacity="0.2"/>
</Canvas>

另外,您确实意识到您正在将Rectangle的宽度绑定到Height的{​​{1}},对吧?

如果这是您想要设置控件的方式,则需要将TextBlock的宽度绑定到Rectangle的{​​{1}}和{{1转到TextBlock

<强>更新 根据下面的评论,这是一个使用ActualWidth没有绑定的实现:

Height

ActualHeightGrid use different layout systems,由于您未使用<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <TextBlock x:Name="StopText" Text="Some test text"/> <Rectangle Fill="SkyBlue" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RadiusX="5" RadiusY="5" Opacity="0.2"/> </Grid> 提供的功能,Grid是更好的选择。

子元素的最大区别在于Canvas现在只在整个Canvas中使用水平和GridRectangle,而不是担心任何东西。