我尝试创建一个自定义控件,具有半透明的圆形背景:
<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
属性,因为它们不是依赖属性。
如何处理相同大小的矩形和文本框?
答案 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
ActualHeight
和Grid
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
中使用水平和Grid
到Rectangle
,而不是担心任何东西。