2

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

<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属性,因为它们不是依赖项。

如何保持相同大小的矩形和文本框?

4

1 回答 1

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>

另外,您确实意识到您正在将 的宽度绑定RectangleHeightTextBlock,对吗?

如果这确实是您想要设置控件的方式,您将需要将Rectangle' 的 Width绑定到TextBlock'ActualWidth和。HeightActualHeight

更新 根据下面的评论,这是一个使用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>

GridCanvas 使用不同的布局系统,并且由于您没有使用所Canvas提供的功能,Grid因此是更好的选择。

子元素的最大区别在于Rectangle现在只使用 Horizo​​ntal 和VerticalAlignmenttoStretch跨越整个Grid,而不用担心任何东西的大小。

于 2010-09-24T13:17:35.370 回答