绑定到ActualHeight不起作用

ser*_*hio 2 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>
Run Code Online (Sandbox Code Playgroud)

问题是我不能绑定到ActualHeight/ ActualWidthproperties,因为它们不是依赖项.

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

Won*_*ane 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>
Run Code Online (Sandbox Code Playgroud)

此外,你意识到你的宽度结合RectangleHeightTextBlock,对不对?

如果这是你想要设置控件的方式,你需要将Rectangle's Width 绑定到TextBlock's ActualWidthHeightto ActualHeight.

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

<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>
Run Code Online (Sandbox Code Playgroud)

GridCanvas 使用不同的布局系统,因为您没有使用Canvas提供的功能,Grid是更好的选择.

在子元素的最大区别是,Rectangle现在只是使用水平和VerticalAlignmentStretch整个Grid,而不必担心任何东西的尺寸.